Java中,匿名内部类在开发中的使用以及匿名内部类的面试题
匿名内部类在开发中的使用
我们在开发的时候,会看到抽象类,或者接口作为方法的形式参数。
而这个时候,我们知道实际需要的是一个子类的对象。
如果该方法仅仅调用一次,我们就可以使用匿名内部类的格式进行简化。
Android开发中这种格式见得多,
JavaEE开发中见得少。
为什么呢?
因为匿名内部类的好处是:
匿名内部类用完之后就是垃圾(即只能用一次),就可以立即被垃圾回收器回收,
栈内存没有东西指向你,Android的手机内存小,要及时让这个对象被回收。
示例代码如下:
1 /* 2 匿名内部类在开发中的使用: 3 Android开发中这种格式见得多, 4 JavaEE开发中见得少。 5 6 为什么呢? 7 因为匿名内部类的好处是: 8 匿名内部类用完之后就是垃圾(即只能用一次),就可以立即被垃圾回收器回收, 9 栈内存没有东西指向你,Android的手机内存小,要及时让这个对象被回收。 10 */ 11 12 //定义一个接口 13 interface Person { 14 public abstract void study(); 15 } 16 17 //定义具体类实现接口 18 class Student implements Person { 19 public void study() { 20 System.out.println("好好学习,天天向上"); 21 } 22 } 23 24 //方法的形式参数为接口时,需要的是该接口的实现类的对象。 25 class PersonDemo { 26 //接口名作为方法的形式参数 27 //其实这里需要的不是接口,而是该接口的实现类的对象 28 public void method(Person p) { 29 p.study(); 30 } 31 } 32 33 class InnerClassTest2 { 34 public static void main(String[] args) { 35 //法一:测试PersonDemo类中的method方法。 36 PersonDemo pd = new PersonDemo(); 37 Person p = new Student(); 38 pd.method(p); 39 System.out.println("--------------------"); 40 41 //法二:匿名内部类在开发中的使用: 42 //匿名内部类的本质是该类的子类或者实现该接口的实现类(子类)的匿名对象。 43 pd.method(new Person(){ 44 public void study() { 45 System.out.println("好好学习,天天向上"); 46 } 47 }); 48 } 49 } 50 51 运行结果为: 52 好好学习,天天向上 53 -------------------- 54 好好学习,天天向上
匿名内部类的面试题
按照要求,补齐代码
interface Inter {
void show();
}
class Outer {
//补齐代码
}
class OuterDemo {
public static void main(String[] args) {
Outer.method().show();
}
}
要求在控制台输出”HelloWorld”
示例代码如下:
1 /* 2 匿名内部类的面试题: 3 按照要求,补齐代码 4 interface Inter { 5 void show(); 6 } 7 class Outer { 8 //补齐代码 9 } 10 class OuterDemo { 11 public static void main(String[] args) { 12 Outer.method().show(); 13 } 14 } 15 要求在控制台输出”HelloWorld” 16 */ 17 interface Inter { 18 void show(); 19 // public abstract 20 } 21 22 class Outer { 23 // 补齐代码 24 public static Inter method() { 25 // 子类对象 -- 子类匿名对象是子类对象的一种 26 return new Inter() { 27 public void show() { 28 System.out.println("HelloWorld"); 29 } 30 }; 31 32 } 33 } 34 35 class OuterDemo { 36 public static void main(String[] args) { 37 Outer.method().show(); 38 /* 39 * 1:Outer.method()可以看出method()应该是Outer中的一个静态方法。 40 * 2:Outer.method().show()可以看出method()方法的返回值是一个对象。 41 * 又由于接口Inter中有一个show()方法,所以我认为method()方法的返回值类型是一个接口。 42 */ 43 } 44 }
Copyright ©2018-2019
【转载文章务必保留出处和署名,谢谢!】
【转载文章务必保留出处和署名,谢谢!】