黑马程序员技术交流社区

标题: 不是借口不能实例化吗,这是为什么啊 [打印本页]

作者: 蒋大帅    时间: 2014-5-18 00:13
标题: 不是借口不能实例化吗,这是为什么啊
本帖最后由 蒋大帅 于 2014-5-18 23:18 编辑

interface Inter{
        public abstract void show();
}
//完成Outer类的内容
class Outer {
        public static Inter method(){
        Inter inter=new Inter(){
        public void show(){
        System.out.println("show");
        }
        };
        return inter;
        }
}
class InnerClassTest  {
        public static void main(String[] args)
        {
                        Outer.method().show();
        }
}

作者: 帅哥哥    时间: 2014-5-18 00:57
本帖最后由 帅哥哥 于 2014-5-18 01:04 编辑

首先,接口是永远不能被实例化的,这点毋庸置疑。这里用匿名内部类实现了接口。
分析一下这句就明白了 Inter inter=new Inter(){......重写show......};
inter 是一个接口类型的引用,这是允许存在的,它可以指向实现了该接口的类的对象,那么很明显,等号右边就是就是一个 实现了Inter接口的类的对象。
既然创建对象,那么对象就属于一个类,这里,这个类是一个匿名内部类。
匿名内部类最主要的应用之一就是实现接口,尤其是那些只有一两个方法的接口,因为可以当场实现,非常方便。
这是一种固定格式的写法。
ps:代码放到代码块里面吧,这样好看~~~
  1. interface Inter
  2. {
  3.         public abstract void show();
  4. }
  5. //完成Outer类的内容
  6. class Outer
  7. {
  8.         //函数返回一个 Inter 类型的引用变量
  9.         public static Inter method()
  10.         {
  11.                 //用匿名内部类实现接口
  12.                 Inter inter=new Inter()
  13.                 {
  14.                         public void show()
  15.                         {
  16.                                 System.out.println("show");
  17.                         }
  18.                 };
  19.                 //返回 inter ,inter指向实现了接口的类的对象,一个匿名内部类对象
  20.                 return inter;
  21.         }
  22. }
  23. class InnerClassTest  
  24. {
  25.         public static void main(String[] args)
  26.         {
  27.                 //这时访问方式
  28.                 Outer.method().show();
  29.         }
  30. }
复制代码





作者: 蒋大帅    时间: 2014-5-18 23:09
好的,谢谢,我看一下匿名内部类的介绍




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2