是真的拒绝了父母遗赠代码的味道吗?

时间:2018-03-25 14:12:10

标签: java inheritance design-patterns

Martin Fowler定义了拒绝的父遗产,因为Subclasses继承了父母的方法和数据。但是,如果他们不想要或不需要他们给予的东西呢?他们获得了所有这些伟大的礼物,并挑选了几个。 现在我的问题是,在下面的代码中,子类仅覆盖父类的方法。那么,是否拒绝了父母的遗赠?

public class BinaryChop extends ColumnFixture {

public int key, array[];
// The execute method is overriden 
public void execute() {
    int empty[] = {};
    if (array==null) array=empty;
}

public int result() {
    return chopFriday(key, array) ;
}

public int mon() {return chopMonday(key, array);}
public int tue() {return chopTuesday(key, array);}
public int wed() {return chopWednesday(key, array);}
public int thr() {return chopThursday(key, array);}
public int fri() {return chopFriday(key, array);}

int chopMonday (int key, int array[]) {
    int min = 0;
    int max = array.length-1;
    while (min<=max) {
        int probe = (min+max)/2;
        if (key == array[probe]) {
            return probe;
        } else if (key > array[probe]) {
            min = probe+1;
        } else {
            max = probe-1;
        }
    }
    return -1;
}
.......
}

此外,Martin Fowler提到&#34;如果子类重用行为但不想支持超类的接口,则拒绝遗赠的气味会更强烈。&#34;有谁可以向我解释一下?这是否意味着overriden方法执行类似于父类方法的操作?

1 个答案:

答案 0 :(得分:1)

覆盖子类中的方法可以达到目的,它不是被拒绝的遗赠气味的实例。

Fowler所说的“...不想支持超类的接口”是指一个子类拒绝超类声明的接口(例如,重写超类中的方法并返回{{1} }甚至NotSupportedException0)。

详细解释可以在Refactoring for software design smells书中的 Broken Hierarchy 设计气味中找到。