Java中,匿名内部类在开发中的使用以及匿名内部类的面试题
2018-02-19 23:18
351 查看
匿名内部类在开发中的使用
我们在开发的时候,会看到抽象类,或者接口作为方法的形式参数。
而这个时候,我们知道实际需要的是一个子类的对象。
如果该方法仅仅调用一次,我们就可以使用匿名内部类的格式进行简化。
Android开发中这种格式见得多,
JavaEE开发中见得少。
为什么呢?
因为匿名内部类的好处是:
匿名内部类用完之后就是垃圾(即只能用一次),就可以立即被垃圾回收器回收,
栈内存没有东西指向你,Android的手机内存小,要及时让这个对象被回收。
示例代码如下:
匿名内部类的面试题
按照要求,补齐代码
interface Inter {
void show();
}
class Outer {
//补齐代码
}
class OuterDemo {
public static void main(String[] args) {
Outer.method().show();
}
}
要求在控制台输出”HelloWorld”
示例代码如下:
我们在开发的时候,会看到抽象类,或者接口作为方法的形式参数。
而这个时候,我们知道实际需要的是一个子类的对象。
如果该方法仅仅调用一次,我们就可以使用匿名内部类的格式进行简化。
Android开发中这种格式见得多,
JavaEE开发中见得少。
为什么呢?
因为匿名内部类的好处是:
匿名内部类用完之后就是垃圾(即只能用一次),就可以立即被垃圾回收器回收,
栈内存没有东西指向你,Android的手机内存小,要及时让这个对象被回收。
示例代码如下:
/* 匿名内部类在开发中的使用: Android开发中这种格式见得多, JavaEE开发中见得少。 为什么呢? 因为匿名内部类的好处是: 匿名内部类用完之后就是垃圾(即只能用一次),就可以立即被垃圾回收器回收, 栈内存没有东西指向你,Android的手机内存小,要及时让这个对象被回收。 */ //定义一个接口 interface Person { public abstract void study(); } //定义具体类实现接口 class Student implements Person { public void study() { System.out.println("好好学习,天天向上"); } } //方法的形式参数为接口时,需要的是该接口的实现类的对象。 class PersonDemo { //接口名作为方法的形式参数 //其实这里需要的不是接口,而是该接口的实现类的对象 public void method(Person p) { p.study(); } } class InnerClassTest2 { public static void main(String[] args) { //法一:测试PersonDemo类中的method方法。 PersonDemo pd = new PersonDemo(); Person p = new Student(); pd.method(p); System.out.println("--------------------"); //法二:匿名内部类在开发中的使用: //匿名内部类的本质是该类的子类或者实现该接口的实现类(子类)的匿名对象。 pd.method(new Person(){ public void study() { System.out.println("好好学习,天天向上"); } }); } } 运行结果为: 好好学习,天天向上 -------------------- 好好学习,天天向上
匿名内部类的面试题
按照要求,补齐代码
interface Inter {
void show();
}
class Outer {
//补齐代码
}
class OuterDemo {
public static void main(String[] args) {
Outer.method().show();
}
}
要求在控制台输出”HelloWorld”
示例代码如下:
/* 匿名内部类的面试题: 按照要求,补齐代码 interface Inter { void show(); } class Outer { //补齐代码 } class OuterDemo { public static void main(String[] args) { Outer.method().show(); } } 要求在控制台输出”HelloWorld” */ interface Inter { void show(); // public abstract } class Outer { // 补齐代码 public static Inter method() { // 子类对象 -- 子类匿名对象是子类对象的一种 return new Inter() { public void show() { System.out.println("HelloWorld"); } }; } } class OuterDemo { public static void main(String[] args) { Outer.method().show(); /* * 1:Outer.method()可以看出method()应该是Outer中的一个静态方法。 * 2:Outer.method().show()可以看出method()方法的返回值是一个对象。 * 又由于接口Inter中有一个show()方法,所以我认为method()方法的返回值类型是一个接口。 */ } }
相关文章推荐
- JAVA基础再回首(二十五)——Lock锁的使用、死锁问题、多线程生产者和消费者、线程池、匿名内部类使用多线程、定时器、面试题
- JAVA基础再回首(二十五)——Lock锁的使用、死锁问题、多线程生产者和消费者、线程池、匿名内部类使用多线程、定时器、面试题
- JAVA基础再回首(二十五)——Lock锁的使用、死锁问题、多线程生产者和消费者、线程池、匿名内部类使用多线程、定时器、面试题
- java开发之匿名内部类,接口的使用
- java笔记--匿名内部类和静态内部类的理解和使用
- java 泛型深入之Set实用工具 各种集合泛型深入使用示例,匿名内部类、内部类应用于泛型探讨
- java 匿名内部类 lambda 在多线程中的使用例子
- java匿名内部类(好处)以及线程的实…
- 黑马程序员---Java匿名内部类使用
- 黑马程序员—————Java基础----其他类的总结(二) 以及内部类和匿名内部类
- 从头认识java-8.8 使用匿名内部类改造7.8章节的工厂方法
- java匿名内部类的使用注意事项
- 中级Java软件开发面试题以及答案
- java中匿名内部类的使用
- JAVA线程操作常见面试题 包括不使用内部类对多个线程加减1
- java代码关于匿名内部类和接口的方法使用
- java 泛型深入之Set实用工具 各种集合泛型深入使用示例,匿名内部类、内部类应用于泛型探讨
- 嵌入式软件开发培训笔记——java第四天(高级类特性——接口/多态/抽象类/内部类以及异常处理)
- JavaSe 1.Java开发环境配置以及使用
- Java开发环境的搭建以及使用eclipse从头一步步创建java项目