【发布时间】:2014-04-15 15:58:21
【问题描述】:
请考虑以下情况:
class A{
private int num = 10;
public int getNum(){ return num; }
public void setNum(int num){ this.num = num; }
}
class B extends A{
private int num;
public B(){
num = getNum();
}
}
在 Java 中,子类无需声明 protected(因为这会将它们暴露给整个包)就可以访问超类的私有成员的一种方法可能是使用超类的 getter 和 setter。不仅在子类的构造函数中,而且在任何需要的地方。
这是人们使用的东西吗?常见的?你见过这个吗?
【问题讨论】:
-
这是一个有效的做法,虽然我没有看到实例变量
B.num的意义——你可以在需要的地方使用 getNum()。 -
你可以在使用私有变量的地方使用超类的方法。所以简而言之,您可以通过超类的
public/protected方法使用private变量。即在这里你使用getNum()方法返回num的值。 -
您写道“没有声明它们受保护(因为这会将它们暴露给整个包)”。那是错误的。 “受保护”意味着只有继承类可以访问。这似乎是您正在寻找的。span>
-
为什么要在子类中重复
num字段? B 已经有一个名为num的字段(getNum()和setNum()可以访问)从 A 继承。为什么要在 B 中重复它? (请注意,B 中的num既不可访问,也始终为 0,给出的代码如图所示。)
标签: java inheritance