在一个继承族中,如果一个子类中的某个独有方法同样被另一个子类需要,那么这个方法就应该提升到父类中去,作为子类公有、可访问的方法。代码如下:
- abstract class Vehicle {
- // some methods
- }
- class Car extends Vehicle {
- public void turn(int direction) {
- // code
- }
- }
- class Motocyble extends Vehicle{
- // some methods
- }
- //全局变量
- interface Directions {
- public static final int LEFT = 1;
- public static final int RIGHT = 2;
- }
重构之后:
- abstract class Vehicle {
- public abstract void turn(int direction);
- }
- class Car extends Vehicle {
- @Override
- public void turn(int direction) {
- // code
- }
- }
- class Motocyble extends Vehicle{
- @Override
- public void turn(int direction) {
- // code
- }
- }
- //全局变量
- interface Directions {
- public static final int LEFT = 1;
- public static final int RIGHT = 2;
- }
其实,提升子类方法作为父类方法,以使所有子类都可见、可覆盖的重构方法,就是使用了继承机制,使得父类方法称为一种类似于“基因”的形式“遗传”给各自类,只不过这种“基因”如果不是抽象象方法,那么具体子类可以自主性地选择性是否要继承。尽管是抽象方法,子类也可以对继承而来的父类抽象方法进行空实现。
同样的道理,什么时候提升方法作为父类方法也应依据具体情况而定,设计模式中好多种模式都有运用到了提升方法的方式,模板方法模式(Template Method)就是很常见的一个了。
本文转自 xxxx66yyyy 51CTO博客,原文链接:http://blog.51cto.com/haolloyin/343551,如需转载请自行联系原作者