Java内部类的总结

内部类是指在一个外部类的内部再定义一个类。内部类作为外部类的一个

成员,并且依附于外部类而存在的。内部类可为静态,可用protected和

private修饰(而外部类只能使用public和缺省的包访问权限)。内部类

主要有以下几类:成员内部类、局部内部类、静态内部类、匿名内部类

 

 



  为什么需要内部类?

  典型的情况是,内部类继承自某个类或实现某个接口,内部类的代码

操作创建其的外围类的对象。所以你可以认为内部类提供了某种进入其外

围类的窗口。使用内部类最吸引人的原因是:

  每个内部类都能独立地继承自一个(接口的)实现,所以无论外围类

是否已经继承了某个(接口的)实现,对于内部类都没有影响。如果没有

内部类提供的可以继承多个具体的或抽象的类的能力,一些设计与编程问

题就很难解决。从这个角度看,内部类使得多重继承的解决方案变得完

整。接口解决了部分问题,而内部类有效地实现了“多重继承”。

 

 



  A:成员内部类

  作为外部类的一个成员存在,与外部类的属性、方法并列。

 

  1. package cn.com.zxx;  
  2. /**  
  3.  * 成员内部类  
  4.  * @author acer  
  5.  * 注意:内部类是一个编译时的概念,一旦编译成功,就会成为两个不同的类,对于如下的两个类,  
  6.  * 编译完成后就变为了:outer.class 和 outer$inner.class两个类  
  7.  */ 
  8. public class Outer {  
  9.     private static int i =1;  
  10.     private int j =10;  
  11.     private int k =20;  
  12.       
  13.     public static void outer_f1(){  
  14.           
  15.     }  
  16.       
  17.     public void outer_f2(){  
  18.           
  19.     }   
  20.       
  21.     //成员内部类中,不能定义  
  22.     //成员内部类中,可以访问外部内中的所有成员  
  23.     class Inner{  
  24. //      static int inner_i =100;  
  25.         int i =1;         
  26.         int j =100;  
  27.         void inner_f1(){  
  28.             System.out.println(i);  
  29.             System.out.println(j);  
  30.             System.out.println(this.j);  
  31.             System.out.println(Outer.this.j);  
  32.             System.out.println(k);  
  33.             outer_f1();  
  34.             outer_f2();  
  35.         }         
  36.     }  
  37.      
  38.     //外部类的非静态方法访问内部成员类  
  39.     public void outer_f3(){  
  40.         Inner inner = new Inner();  
  41.         inner.inner_f1();  
  42.     }  
  43.       
  44.     //外部类的静态方法访问内部类  
  45.     public static void outer_f4(){  
  46.         Outer outer = new Outer();  
  47.         Inner inner = outer.new Inner();  
  48.         inner.inner_f1();  
  49.     }  
  50.       
  51.     public static void main(String[] args) {  
  52. //outer_f4();  
  53.         //如果要直接创建内部类的对象,不想想当然地认为只需要加上外围内的名字就可以了   
  54.         //而是必须使用外部内的一个对象来创建一个内部类的对象  
  55.         Outer outer = new Outer();  
  56.         Inner inner = outer.new Inner();  
  57.         inner.inner_f1();  
  58.     }  
  59.       
  60. }  

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章