您的位置:首页 > 职场人生

Java中,匿名内部类在开发中的使用以及匿名内部类的面试题

2018-02-19 23:18 351 查看
匿名内部类在开发中的使用

  我们在开发的时候,会看到抽象类,或者接口作为方法的形式参数。
  而这个时候,我们知道实际需要的是一个子类的对象。
  如果该方法仅仅调用一次,我们就可以使用匿名内部类的格式进行简化。

  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()方法的返回值类型是一个接口。
*/
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐