java匿名类

匿名类:顾名思义,就是没有名字的类,所以它不能在任何地方引用,它只能被初始化一次。它的实现方式有两种,一种是继承抽象类,另一种是实现接口。

方式一:

定义抽象类

public abstract class AbstractAnonymous {
    String fatherStr = "abstractAnonymous";
    
    void fatherDisplay() {
        System.out.println(fatherStr);
    }
    
    abstract void display();
}

实现匿名类

public class Demo1 {
    private static String str = "hello";
    
    public static void outDisplay() {
        System.out.println(str);
    }
    
    public static void main(String[] args) {        
        AbstractAnonymous abstractAnonymous = new AbstractAnonymous() {
            @Override
            void display() {
                System.out.println("hello");
            }
        };
        
        abstractAnonymous.display();
    }
}

匿名类与外部类:匿名类可以访问外部类的成员变量,成员方法。

public class Demo1 {
    private static String str = "hello";
    
    public static void outDisplay() {
        System.out.println(str);
    }
    
    public static void main(String[] args) {        
        AbstractAnonymous abstractAnonymous = new AbstractAnonymous() {
            @Override
            void display() {
                System.out.println(str);//访问外部类成员变量
                outDisplay();//访问外部类成员方法
            }
        };
        
        abstractAnonymous.display();
    }
}

匿名类与父类:匿名类同样可以访问父类的成员变量以及成员方法。

public class Demo1 {
    private static String str = "hello";
    
    public static void outDisplay() {
        System.out.println(str);
    }
    
    public static void main(String[] args) {
           AbstractAnonymous abstractAnonymous = new AbstractAnonymous() {
            @Override
            void display() {
                System.out.println(fatherStr);
                fatherDisplay();
            }
        };
        
        abstractAnonymous.display();
    }
}

方式二:

定义接口

public interface Anonymous {
   String fatherStr = "anonymous";
   public abstract void display();
}

实现匿名类

public class Demo1 {
    private static String str = "hello";
    
    public static void outDisplay() {
        System.out.println(str);
    }
    
    public static void main(String[] args) {
        Anonymous anonymous = new Anonymous() {
            @Override  
            public void display() {
                //重写父类方法,调用是在别的地方
                System.out.println(str);
                outDisplay();
                System.out.println(fatherStr);
            }
        };

        anonymous.display();
      }
}

通过接口的方式实现匿名类,可以访问外部类的成员变量,成员方法,同样也可以访问接口的成员变量。关于重写父类方法的调用,并不是在匿名类重写的地方,而是在别的地方。

posted @ 2019-01-22 11:01  慕易217  阅读(105)  评论(0)    收藏  举报