【发布时间】:2013-08-19 16:24:25
【问题描述】:
片段#1:
public abstract class SuperClass {
protected int i;
}
public class SubClass extends SuperClass {
public void method() {
i = doAnythingWithI(i); // for example
}
}
片段#2:
public abstract class SuperClass {
private int i;
protected int getI() {
return i;
}
protected int setI(int i) {
this.i = i;
}
}
public class SubClass extends SuperClass {
public void method() {
setI(doAnythingWithI(getI())); // for example
}
}
为什么要使用一个 sn-p 而不是另一个?最常见的处理方式是什么?
【问题讨论】:
-
我会说你很可能会使用前一个代码 sn-p 而不是后一个代码 sn-p。正确封装
i毫无意义,因为您甚至没有使用 set 方法执行任何操作,因此您只是在堆栈上添加更多内容,可能会减慢您的程序。 -
在第一个sn-p中
SuperClass和SubClass是紧耦合的,这让我产生疑问,为什么要引入SubClass。在第二个 sn-p 中,i字段被get/set对完全暴露,这对再次将SubClass紧密耦合到其父级。这再次提出了同样的问题:为什么要引入SubClass。此外,sn-ps 看起来您想使用继承来实现,但您应该将其用于表现为,而不是实现为。
标签: java inheritance protected