首页 > 代码库 > 内部类
内部类
内部类:指在一个外部类内部在定义一个类.内部类作为一个外部类的成员.并依附外部类而存在.
分为4种
- 成员内部类 作为外部类的一个成员存在,与外部类的属性方法并列.
-
1 public class Outer { 2 private static int i = 1; 3 private int j = 10; 4 private int k = 20; 5 6 public static void outer_f1(){ 7 8 } 9 public void outer_f2(){10 11 }12 13 //成员内部类中不能定义静态成员14 //成员内部类中,可以访问所有外部成员15 class Inner{16 // static int inner_i = 100;//内部类不允许定义静态变量17 int j = 100;//内部类和外部类实例变量可以共存18 int inner_i = 1;19 void inner_f1(){20 System.out.println(i);21 22 //内部类访问内部类自己变量名时,直接用变量名23 System.out.println(j);24 //也可以this.变量名25 System.out.println(this.j);26 27 //在内部类中访问外部类中与内部类同名的实例变量 用外部类名.this.变量名28 System.out.println(Outer.this.j);29 //没有与外部类同名的变量,内部类可以直接访问外部类变量30 System.out.println(k);31 outer_f1();32 outer_f2();33 }34 }35 36 public void outer_f3(){37 //外部方法使用内部方法需要创建内部类对象38 Inner inter = new Inner();//对象实例化39 inter.inner_f1();40 }41 //外部类的静态方法访问成员内部类,与在外部类访问成员内部类一样.42 public static void outer_f4(){43 // step1: 建立外部类对象44 Outer outer = new Outer();45 // step2:根据外部类对象建立内部类对象46 Inner inner = outer.new Inner();47 // setp3:访问内部类方法48 inner.inner_f1();49 }50 //主方法main51 public static void main(String[] args) {52 // outer_f4();//和下面3条输出结果一样53 54 // Outer outer = new Outer();55 // Inner inner = outer.new Inner();56 // inner.inner_f1();57 58 Outer outer = new Outer();59 Outer.Inner outin = outer.new Inner();60 outin.inner_f1();61 }62 }
注意:内部类是一个编译时的概念,一旦编译成功,就会成为不完全不同的2个类.对于一个名为Outer的外部类和其内部Inner的内部类.编译完成后出现Outer.class和Outer$Inner.class.
局部内部类 定义在外部内类的方法内部. -
1 public class Outer { 2 private int s = 100; 3 private int out_i = 10; 4 5 public void f(final int k){ 6 final int s = 200; 7 int i = 1; 8 final int j = 10; 9 10 //局部内部类,定义在方法内部11 class Inner{12 int s = 300; //可以定义与外部内同名变量13 int inner_i = 100;14 //static int m =20;//不能定义静态变量15 Inner (int k){16 inner_f(k);17 }18 void inner_f(int k) {19 //如果内部类没有与外部类同名变量,内部类可以直接访问外部类实例变量20 System.out.println(out_i);21 //可以访问外部类方法内的局部变量,但是变量必须是final22 System.out.println(j);23 //如果内部和外部均有,访问的是内部类变量.24 System.out.println(s);25 //用this.变量名访问的是内部变量26 System.out.println(this.s);27 //访问外部变量用外部类名.this.s28 System.out.println(Outer.this.s);29 }30 }31 new Inner(k);32 }33 34 //主方法main35 public static void main(String[] args) {36 //访问内部内必须先有外部类对象37 Outer out = new Outer();38 out.f(3);39 }40 }
- 静态内部类
- 匿名内部类
内部类
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。