1 //1 2 new Object(){ 3 void show(){ 4 System.out.println("show run"); 5 } 6 }.show(); 7 //2 8 Object obj = new Object(){ 9 void show(){ 10 System.out.println("show run"); 11 } 12 }; 13 obj.show(); 14 15
1和2的写法正确吗?有区别吗?说出原因。 16 写法是正确,1和2都是在通过匿名内部类建立一个Object类的子类对象。 17 区别: 18 第一个可是编译通过,并运行。 19 第二个编译失败,因为匿名内部类是一个子类对象,当用Object的obj引用指向时,就被提升为了 20 Object类型,而编译时检查Object类中是否有show方法,所以编译失败。 -----------
1 class InnerClassDemo6 { 2 +(static)class Inner{ 3 void show(){} 4 } 5 public void method(){ 6 this.new Inner().show();//可以 7 } 8 public static void main(String[] args) {//static不允许this 9 This.new Inner().show();//错误,Inner类需要定义成static 10 } 11 }
---------------------------
1 interface Inter{ 2 void show(); 3 } 4 class Outer{//通过匿名内部类补足Outer类中的代码。 5 public static Inter method(){ 6 return new Inter(){ 7 public void show(){} 8 }; 9 } 10 } 11 class InnerClassDemo7 { 12 public static void main(String[] args) { 13 Outer.method().show(); 14 /* 15 Outer.method():意思是:Outer中有一个名称为method的方法,而且这个方法是静态的。 16 Outer.method().show():当Outer类调用静态的method方法运算结束后的结果又调用了show方法,意味着:method()方法运算完一个是对象,而且这个对象是Inter类型的。 17 */ 18 function (new Inter(){ 19 public void show(){} 20 }); //匿名内部类作为方法的参数进行传递。 21 } 22 public static void function(Inter in){ 23 in.show(); 24 } 25 }
时间: 2024-10-12 05:32:02