Java面向对象之内部类(匿名内部类)
一、基础概念
匿名内部类:简化书写的内部类。其实匿名内部类就是一个子类对象。
前提:内部类需要继承或者实现外部的类或者接口。
格式:new 父类或者接口(){定义子类的内容}
二、将内部类定义到局部的实例代码
1 /* 2 class Outer 3 { 4 int num = 2; 5 //内部类 6 class Inner 7 { 8 int num = 3; 9 void show() 10 { 11 int num = 4; 12 System.out.println("show ..."+num); 13 System.out.println("show ..."+Inner.this.num); 14 System.out.println("show ..."+Outer.this.num); 15 } 16 } 17 public void method1() 18 { 19 new Inner().show(); 20 } 21 } 22 */ 23 24 //将上面代码的内部类定义到局部位置上。 25 class Outer 26 { 27 private int num = 2; 28 public void method1() 29 { 30 final int x=3; //内部类在局部时,只能被final修饰的局部常量,才可以被访问。 31 class Inner 32 { 33 void show() 34 { 35 int num = 4; 36 System.out.println("x="+x); 37 System.out.println("show ..."+num); 38 System.out.println("show ..."+Outer.this.num); 39 } 40 } 41 42 //创建内部类对象 43 Inner in = new Inner(); 44 in.show(); 45 } 46 } 47 48 class InnerClassDemo2 49 { 50 public static void main(String[] args) 51 { 52 new Outer().method1(); 53 } 54 }
三、匿名内部类实例代码(一)
1 abstract class Demo 2 { 3 abstract void show1(); 4 } 5 6 class OuterDemo 7 { 8 int num = 4; 9 /* 10 class Inner extends Demo 11 { 12 //复写 13 public void show1() 14 { 15 System.out.println("show1 ..."+num); 16 } 17 } 18 Inner in = new Inner(); 19 in.show(); 20 */ 21 22 //将上面注释的代码用匿名内部类的方式显示 23 24 public void method2() 25 { 26 //匿名内部类 27 new Demo() 28 { 29 public void show1() 30 { 31 System.out.println("show1 ..."+num); 32 } 33 }.show1(); 34 } 35 } 36 37 class InnerClassDemo2 38 { 39 public static void main(String[] args) 40 { 41 new OuterDemo().method2(); 42 } 43 }
四、匿名内部类实例代码(二)
1 abstract class Demo 2 { 3 abstract void show1(); 4 abstract void show2(); 5 } 6 7 class OuterDemo 8 { 9 int num = 4; 10 /* 11 class Inner extends Demo 12 { 13 //复写 14 public void show1() 15 { 16 System.out.println("show1 ..."+num); 17 } 18 public void show2() 19 { 20 System.out.println("show2 ..."+num); 21 } 22 } 23 Inner in = new Inner(); 24 in.show(); 25 */ 26 27 //将上面注释的代码用匿名内部类的方式显示 28 public void method2() 29 { 30 //匿名内部类 31 Demo a = new Demo() 32 { 33 void show1() 34 { 35 System.out.println("show1 ..."+num); 36 } 37 void show2() 38 { 39 System.out.println("show2 ..."+num); 40 } 41 }; 42 a.show1(); 43 a.show2(); 44 } 45 } 46 47 class InnerClassDemo2 48 { 49 public static void main(String[] args) 50 { 51 new OuterDemo().method2(); 52 } 53 }