判断方法就是问一问自己是否需要从新类向基类进行向上转型。如果必须向上转型,则继承是必要的。
设计模式里面有个比较难懂的——代理模式,作者讲的很有趣,代理是组合和继承的中庸之道。
package son; class Father{ public void get(){ System.out.println("father"); } } public class Son extends Father{ public static void main(String[] args) { Father f = new Father(); f.get(); } } class FatherProxy{ private Father f = new Father(); public void get(){ f.get(); } }像直接把Father当做成员,那么father的方法就暴露给这个类了,那我们可以使用FatherProxy这样的代理类,我自己定义好get方法是怎么拿的,我自己知道是调用father的get方法,但是使用我这个代理的人不知道,我只告诉他你要用就用代理的get的方法就可以了。封装性就体现出来了。上面只是随便敲的一个简单例子。