子类对超类中受保护的变量“私有化”的目的是什么?例如:-
abstract public class Creature{
protected String name;
abstract public String getName();
abstract public void setName(String newName);
}
public class Girafee extends Creature {
private String name;
public Girafee() {
}
@Override
public String getName() {
return this.name;
}
@Override
public void setName(String newName) {
this.name = newName;
}
}发布于 2013-12-30 11:00:50
您没有将变量私有化;您使用相同的名称创建了子类的自己的变量。现在,您的类有两个具有相同简单名称的变量,这两个变量都可以访问:
this.name与
((Creature)this).name发布于 2013-12-30 11:01:49
它们都是完全不同的实例成员。
根据代码中的定义,您可以访问子类中的超类变量,并防止子类变量从其类的外部访问。
这只是为了混淆您可以使用的people.Though,您应该避免使用同名的父/子变量。
发布于 2013-12-30 12:10:27
您的程序还可以理解为:name属性的creature与giraffe的name属性不同。只是他们的拼写一样而已!
好吧,你的例子也指出了数据隐藏的某些细节。
派生类成员名称的任何使用都将始终引用定义为派生类的一部分的成员。要引用基类成员,必须使用关键字Super对其进行限定。
public class Base {
protected String s = "Hello Base";
public void get() {
System.out.println("Base string:" + s);
}
public static void main(String[] args) {
Base b = new Base();
b.get();
Derived d = new Derived();
d.get();
((Base) d).get();
Base der = new Derived();
der.get();
}}
class Derived extends Base {
protected String s = "Hello Derived";
@Override
public void get() {
System.out.println("Derived String: " + s);
}}
该方案的产出:
Base string:Hello Base
Derived String: Hello Derived
Derived String: Hello Derived
Derived String: Hello Derived
https://stackoverflow.com/questions/20838106
复制相似问题