Java:继承的目的及缺陷

在java中继承好像占用很重要的位置,很多地方多次强调,但这并不意味着必须使用它。我们要慎用这门技术。

那么到底什么时候使用继承?一个最清晰的判断方法就是问问自己是否需要从子类向父类进行向上转型,如果必须向上转型,则继承是必须的。

继承的缺陷

Java:继承的目的及缺陷_第1张图片
image.png
Java:继承的目的及缺陷_第2张图片
image.png

导出类(子类)中接口拓展的部分不能被基类(父类)访问,因此一旦我们向上转型,就不能调用导出类的拓展方法了(接口)

class Useful {
public void f() {}
public void g() {}
}
class MoreUseful extends Useful {
public void f() {}
public void g() {}
public void u() {}
public void v() {}
public void w() {}
}
public class RTTI {
public static void main(String[] args) {
Useful[] x = {
new Useful(),
new MoreUseful()
};
x[0].f();
x[1].g();
// **编译异常: 在 Useful方法不能被找到。**
**//! x[1].u();**
((MoreUseful)x[1]).u(); // **向下转型/RTTI**
((MoreUseful)x[0]).u(); // **抛出异常**
}
} ///:~

Exception in thread "main" java.lang.ClassCastException: pdmtest.cl.Useful cannot be cast to pdmtest.cl.MoreUseful
    at pdmtest.cl.RTTI.main(RTTI.java:36)

你可能感兴趣的:(Java:继承的目的及缺陷)