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”