匿名内部类-细节

 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     +(staticclass 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 }
原文地址:https://www.cnblogs.com/linst/p/4966266.html