黑马程序员技术交流社区
标题:
不是借口不能实例化吗,这是为什么啊
[打印本页]
作者:
蒋大帅
时间:
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:代码放到代码块里面吧,这样好看~~~
interface Inter
{
public abstract void show();
}
//完成Outer类的内容
class Outer
{
//函数返回一个 Inter 类型的引用变量
public static Inter method()
{
//用匿名内部类实现接口
Inter inter=new Inter()
{
public void show()
{
System.out.println("show");
}
};
//返回 inter ,inter指向实现了接口的类的对象,一个匿名内部类对象
return inter;
}
}
class InnerClassTest
{
public static void main(String[] args)
{
//这时访问方式
Outer.method().show();
}
}
复制代码
作者:
蒋大帅
时间:
2014-5-18 23:09
好的,谢谢,我看一下匿名内部类的介绍
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2