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方法执行类似于父类方法的操作?
答案 0 :(得分:1)
覆盖子类中的方法可以达到目的,它不是被拒绝的遗赠气味的实例。
Fowler所说的“...不想支持超类的接口”是指一个子类拒绝超类声明的接口(例如,重写超类中的方法并返回{{1} }甚至NotSupportedException
或0
)。
详细解释可以在Refactoring for software design smells书中的 Broken Hierarchy 设计气味中找到。