zoukankan      html  css  js  c++  java
  • 匿名内部类-细节

     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 }
  • 相关阅读:
    mysql相关
    java注解@Valid@Validated表单验证
    驼峰参数、下划线["_"]参数,属性互传
    redis,windows设置记录
    Java入门第一季学习总结
    计算属性calc()的运算规则
    swiper实现翻页,页面高度超出可滚动
    git常用命令
    Linux下svn常用命令
    图片高度不够一页,如何覆盖全屏
  • 原文地址:https://www.cnblogs.com/linst/p/4966266.html
Copyright © 2011-2022 走看看