首先看看下面这段代码是不是java接口的实例化,代码如下:
class MyThread implements Runnable{
............//此处省略
}
//另一个类的main方法中:
Runnable r = new MyThread();
其实很明显,这是父类声明指向子类的引用。具体实例化的是MyThread这个对象。然后进行了思考,针对如下代码:
Thread t = new Thread(new Runnable(){
@Override
public void run(){
.............
}
})
这段代码大家也许并不陌生,那么有人要问了,既然接口不能实例化,Runnable是一个接口,此处不是用new来实例化了么。这个其实就是一个假象的实例化而已,这种叫做匿名内部类,实质的代码等同于如下代码:
class MyThread implements Runnable{
@Override
public viod run(){
...............
}
}
//另一个类的main方法中
Thread t = new Thread(new MyThread());
只是上面的代码省略掉了类的名字而已。。。。
好了,前面的都是最基础的,我们学习java时老师其实都会讲的,接下来,是一些
本文探讨了Java中接口和抽象类不能被实例化的根本原因,通过实例和内存模型解释了实例化的概念。接口在内存中没有实际值需要存储,而抽象类含有未实现的方法,两者实例化都缺乏实际意义,因此Java设计中避免了这种情况,以防止不必要的内存浪费。
订阅专栏 解锁全文

1051

被折叠的 条评论
为什么被折叠?



