抽象类和接口不能实例化吗?
书上说抽象类和接中不能用new实例化,但是ActionListener是接口,WindowAdapter是抽象类,在很多事件处理时都用到了new,这是怎么回事? 问题点数:25、回复次数:8Top
1 楼bevin1010(木瓜)回复于 2006-01-25 11:43:04 得分 3
是说不可以直接实例化,可以指向实体类!
这种用法是最普通的用法,要不用接口与抽象类干嘛Top
2 楼kingofhawks(蓝鹰)回复于 2006-01-25 11:49:31 得分 3
父类引用可以指向派生类对象。Top
3 楼arsaluo(热血年华)回复于 2006-01-25 12:17:04 得分 3
WindowAdapter不是真正的抽象类 里面实现了空的方法
抽象类和接口不能实例化Top
4 楼chg2008(岂能尽如人意,但求无愧我心!)回复于 2006-01-25 12:24:03 得分 3
是不能实例化,但可以指向实体类Top
5 楼Visual_studio(honghong)回复于 2006-01-25 13:32:55 得分 3
WindowAdapter是个适配器,它将监听接口中的方法以空方法的形式来实现,它是一个具有空方法的实体类,所以可以newTop
6 楼Samland(samland)回复于 2006-01-25 13:45:47 得分 3
不能。
你必须实现一个“派生类(C++的叫法)”,或者找到已经实现这个接口的类,才能使用。
Top
7 楼sky_boxer(饿鱼骨头)回复于 2006-01-25 20:18:32 得分 3
是说不能建立它们的实例,就是说不能直接用Interface interface= new InterfaceObject();
而可以InterfaceObject interface= new InterfaceImp();
既是说把其的reference定位到这个interface or abstract class的implemeted class的实例。Top
8 楼didoleo(冷月无声)回复于 2006-01-25 21:21:58 得分 4
楼主大哥,可能看到有这样的写法,所以就认为接口或抽象类也能"new " 他一把了.
button.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
System.exit(1);
}
});
其实这是个匿名类呀! 所谓匿名就是这个类连个名字都没有,但他却implements了 ActionListener罢了.
WindowAdapter是个适配器,我猜测你看到应该也是一匿名类的写法.
Top




