• 匿名内部类-细节


     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 }
  • 相关阅读:
    15天学会jquery
    js常用方法
    js兼容注意事项--仅供参考
    Javascript面向对象特性实现封装、继承、接口详细案例
    关于sql用<>不等于查询数据不对问题
    解决document.onclick在IE下用不了或无效的问题
    解决Button设置disabled后无法执行后台代码问题
    利用Wireshark截取数据包,并对数据包进行解析
    导入本地文本中的数据到MySQL数据库中
    删除数据库中重复项
  • 原文地址:https://www.cnblogs.com/linst/p/4966266.html
Copyright © 2020-2023  润新知