java学习之day08--内部类

视频知识点总结:
1.自动装箱
-基本类型就自动地封装到与它相同类型的包装中,如:Interger i=100,
本质上是,编译器编译时为我们添加了:Integer i=new Interger(100);
2.自动拆箱
-包装类对象自动转换成基本类型数据,如:int a=new Integer(100);本质上,
编译器编译时为我们添加了:int a=new Integer(100).intValue();
3.缓存问题:-128-127即使装箱 ,也当基本数据类型处理
4.内部类:
我们把一个类定义在另一个类的内部,称为内部类
内部类的作用:
 -内部类提供了更好的封装,只能允许外部类直接访问,
  不允许包下的其他类直接访问。
-内部类可以直接访问外部类的私有属性,内部类被当成外部类的成员,
但外部类不能访问内部类的内部属性。
内部类的使用场合:
 -因为内不能提供了更好的封装性,所以只在为外部类提供服务时,优先使用
分类:
 -成员内部类
 -匿名内部类:匿名内部类没有类名,没有class关键字也没有extends和implements等关键字修饰。

匿名内部类会隐式地继承一个父类或实现一个接口
 -局部内部类(用的很少)
--------------------------------------------------------------------------------
简答题:
1.内部类的形式是怎样的?
答:在一个类的内部,声明一个类;

2.为什么要有内部类?
答:当内部类 比如 cpu只为外部类coomputer服务时,优先使用内部类;
类只能单继承,当确定需要例外的类时,就可以使用内部类满足需求。

3.利用内部类可以方便实现拿些功能?
答:无论是方法内部类还是匿名内部类,它们的共同点同2中提到的一样,可以不受限制的
访问外部类的域和方法。同时,可根据限制条件让内部类隐藏或向上转型为接口类型,
从而消除方法返回的具体类型的限制。匿名内部类可以隐藏接口的具体实现,使得类的
使用者只关注要实现的目标。

4.内部类的实现机制?
必须现有外部类的对象才能有内部类的对象,通过内部类的对象实现内部类的方法。

5.内部类可以引用它的包含类(外部类)的成员吗?有没有什么限制?
答:可以,普通内部类只能访问外部类的普通成员,静态内部类只能访问外部类的静态成员。

-----------------------------------------------------------------------------------------
程序题:
package 内部类练习;-----------普通成员内部类
interface Instrument{
 void play();
}
public class day0801 {
 class Instrument1 implements Instrument{
  void PlayInstrument(Instrument ins){
   ins.play();
  }
  public void play(){
   System.out.println("成员内部类!");
  }
 }
  public static void main(String[] args) {
            day0801 instrument=new day0801();
            Instrument1 i1=instrument.new Instrument1();
            i1.PlayInstrument(i1);
  }
}


package 内部类练习1;----------------------局部内部类
interface Instrument{
 public void run();
}
public class day08 {
 void PlayInstrument(){
  class Instrument2 implements Instrument{
   public void run(){
    System.out.println("局部内部类");
   }
   
  }
  new Instrument2().run();
 }
public   static void main(String [] args){
 day08 instrument=new day08();
 instrument.PlayInstrument();
}
}

 

package 内部类练习2;--------------------匿名内部类
interface Instrument{
  void play();
   }
public class day0803 {
 void PlayInstrument(){
     new Instrument(){
      public void play(){
       System.out.println("匿名内部类");
      } 
      }.play();
    }
     public static void main(String [] args){
      day0803 instrument=new day0803();
      instrument.PlayInstrument();
     }
}

 

 

 


 

你可能感兴趣的:(内部类)