这个问题有点老生常谈了,但是看到坛子里面有人给出了误导的说法还有人认为是good points,就来正一正视听罢,正好今天比较闲。
假设A有两个subclass B和C,D又同时是B和C的subclass,这是最简单的多继承例子。当B和C中有重名的method,那在D中继承的是哪个呢?这个问题就叫diamond problem,因为4个class和4个继承关系组成的图形如钻石。
diamond problem不是不可解决,有些语言比如C++是支持多继承的。但是,多继承带来的麻烦比好处要大,Java的设计者们的本意是要设计一个简单的语言,所以他们放弃了对class多继承的支持,而用没有implementation的interface来实现多继承。
OK,如果你在面试中被问到这样的问题,你可以说“是为了避免钻石问题”,可千万不要说是因为内存管理方面的原因...
如果对diamond problem有进一步的兴趣请自行google,小弟就不负责任了。不过sun对多继承的说明不太好找,我再奉送一个link:http://java.sun.com/docs/white/langenv/ 这篇白皮书如果没有读过还是可以用来消磨下马桶上的时光的。
假设A有两个subclass B和C,D又同时是B和C的subclass,这是最简单的多继承例子。当B和C中有重名的method,那在D中继承的是哪个呢?这个问题就叫diamond problem,因为4个class和4个继承关系组成的图形如钻石。
diamond problem不是不可解决,有些语言比如C++是支持多继承的。但是,多继承带来的麻烦比好处要大,Java的设计者们的本意是要设计一个简单的语言,所以他们放弃了对class多继承的支持,而用没有implementation的interface来实现多继承。
OK,如果你在面试中被问到这样的问题,你可以说“是为了避免钻石问题”,可千万不要说是因为内存管理方面的原因...
如果对diamond problem有进一步的兴趣请自行google,小弟就不负责任了。不过sun对多继承的说明不太好找,我再奉送一个link:http://java.sun.com/docs/white/langenv/ 这篇白皮书如果没有读过还是可以用来消磨下马桶上的时光的。