6.8匿名内部类

2019-03-28  本文已影响0人  十六只猴子王

匿名内部类

如果接口的实现类(或者是父类的子类),只需要使用唯一的一次。
那么这种情况就可以省略该类的定义,而改为使用【匿名内部类】

package InnerClass.匿名内部类;

public interface MyaInterface {
    public abstract  void mehtod();
    void method();
}

package InnerClass.匿名内部类;

public class MyInterfaceImpl implements MyaInterface {
    @Override
    public void mehtod() {
        System.out.println("覆盖接口可方法");
    }
}
package InnerClass.匿名内部类;

public class DemoMain {
    public static void main(String[] args) {
       /* MyaInterface obj = new MyInterfaceImpl();
        obj .mehtod();;*/
//        MyaInterface same = new MyaInterface() ;//错误写法
            MyaInterface  obj = new MyaInterface() {
                @Override
                public void mehtod() {
                    System.out.println("匿名内部类实现了方法");
                }
            };
    }
}

匿名内部类的注意事项

1.匿名内部类,在【创建对象】的时候,只能唯一的 使用一次

2.匿名对象,在【调用方法】的时候,只能调用唯一一次。如果希望同一个对象,调用多次方法,那么必须给对象起个名字

3.匿名内部是省略了【实现类/子类名称】,但是匿名对象是省略了【对象名称】强调:匿名内部类和匿名对象不是一回事!!!


public class DemoMain {
    public static void main(String[] args) {
       /* MyaInterface obj = new MyInterfaceImpl();
        obj .mehtod();;*/
//        MyaInterface same = new MyaInterface() ;//错误写法

        //使用匿名内部类,但不是匿名对象,对象名称就叫objA
          MyaInterface  objA = new MyaInterface() {
                @Override
                public void mehthod1() { System.out.println("匿名内部类实现了方法1a"); }

                @Override
                public void method2() { System.out.println("匿名内部类实现了方法2a"); }
            };
            objA.mehthod1();
            objA.method2();
        System.out.println("=======================");
        //使用了匿名内部类,而且省略了对象名称,也是匿名对象
        new MyaInterface() {
            @Override
            public void mehthod1() { System.out.println("匿名内部类实现了方法1b"); }

            @Override
            public void method2() { System.out.println("匿名内部类实现了方法2b"); }
        }.mehthod1();
        //因为匿名对象无法调用第二次方法,所以需要在创建一个匿名内部类的匿名对象才能调用两次方法


    }
}
上一篇下一篇

猜你喜欢

热点阅读