下面有两个类:
public class Animal {
private String name;
public Animal(String name) {
this.name = name;
}
public String getName() {
return name;
}
}
public class Cat extends Animal {
public Cat(String name) {
super(name);
}
public static void main(String[] args) {
Cat cat = new Cat("Tom");
System.out.println(cat.getName());
}
}
结果是" Tom"。
但是价值是动物还是猫的财产价值?如果是动物,为什么猫可以得到它?
答案 0 :(得分:1)
属性name
虽然在private
中声明为Animal
,但在Cat
中仍会继承。但是,我们无法直接访问它,即您无法name
使用.
运算符,例如cat.name = "Jerry"
。但是,由于方法getName
在Animal
中声明,因此可以访问Animal
的私有成员。 getName
public
也是Cat
,因此我们可以在private
中访问它。
这意味着我们正在访问子类中超类的name
成员。这很明显。你似乎对此感到困惑,因为很多
Tom
如何设置为name
: - Animal
是通过Cat
的公共构造函数设置的。 name
的构造函数将Animal
的值传递给Cat cat = new Cat("Tom");
构造函数,然后将其设置。
编辑:当您说Cat
时,表示您只创建了一个对象。 Animal
的对象。您还没有创建Animal
的对象。虽然调用Animal
的构造函数,但它不会创建name
的实例。在上述情况下,属性Cat
属于Animal
的实例,而不属于{{1}}。
答案 1 :(得分:0)
Animal
有一位私人会员name
;当Cat
的构造函数调用存储名称的Animal
的构造函数时,getName
的{{1}}可以返回它。