继承需要谨慎使用,继承使用的场景是以父类为核心,子类是父类某个特性方法的实现。比如
abstract class Payment{public void payGoods(){// 计算物资int value = calcGoods();// 付钱pay();}abstract int pay(int value);}class RMBPayment extends Payment{@Overrideint pay(int value){return value * 7;}}class USDPayment extends Payment{@Overrideint pay(int value){return value * 1;}}
如上,类的核心依然在于Payment的payGoods方法,而子类实现只是针对不同货币的实现。
而如果实际使用的核心是子类,父类的方法只是作为共用内容,这种场景应该使用组合而不是继承,如下:
class Worker{void init();}class CarWorker extends Worker{void packCar(){init();doPackCar();}}class ComputerWorker extends Worker{void packComputer(){init();doPackComputer();}}
如上,这种情况下,类的核心在于子类,应该讲Worker和下面两个类进行组合而不是继承。
