Day09面试题以及匿名内部类在开发中的应用

Day09面试题以及匿名内部类在开发中的应用

二。匿名内部类在开发中的应用(绿色字体是有名字的类来做,黑色字体是匿名内部类来做)

class Test1_NoNameInnerClass {
    public static void main(String[] args) {
        //如何调用PersonDemo中的method方法呢?
        PersonDemo pd = new PersonDemo ();
        //pd.method(new Student());
        pd.method(new Person() {       //匿名内部类当作参数传递(本质把匿名内部类看作一个对象)
            public void show() {
                System.out.println("show");
            }
        });
    }
}
//这里写抽象类,接口都行
abstract class Person {
    public abstract void show();
}

class PersonDemo {
    
    //public void method(Person p) {        //Person p = new Student();        //父类引用指向子类对象
    /*下面的代码是对Person p解释
    Person p = new Person(){
        public void show() {
            System.out.println("show");
        }                                                                            // 把这整个对象赋值给下边的Person p中的p进行 调用

    };
    */

    public void method(Person p) {
        p.show();
    }
}

class Student extends Person {
    public void show() {
        System.out.println("show");
    }
}

 

3.面试题

        按照要求,补齐代码
        interface Inter { void show(); }
        class Outer { //补齐代码 }
        class OuterDemo {
            public static void main(String[] args) {
                  Outer.method().show();
              }
        }
        要求在控制台输出”HelloWorld”

 

 

答案:

class Test2_NoNameInnerClass {
    public static void main(String[] args) {
        //Outer.method().show();            //链式编程,每次调用方法后还能继续调用方法,证明调用方法返回的是对象

                                                            //从Outer.method()就可以知道method方法是静态的(用类去调用一个方法)。 method().show()返回的是Inter的子类对象
        Inter i = Outer.method();
        i.show();
    }
}
//按照要求,补齐代码
interface Inter { 
    void show(); 
}

class Outer { 
    //补齐代码 
    public static Inter method() {
        return new Inter() {
            public void show() {
                System.out.println("show");
            }
        };
    }
}

//要求在控制台输出”HelloWorld”