gpt4 book ai didi

java - 扩展父类中私有(private)成员的层次结构

转载 作者:行者123 更新时间:2023-11-30 11:19:09 26 4
gpt4 key购买 nike

下面有两个类:

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());
}
}

结果是“汤姆”。

但是这个值是Animal还是Cat的属性值?如果是Animal,为什么cat能搞定?

最佳答案

属性 name 虽然在 Animal 中声明为 private Cat 中仍然继承>。但是,我们无法直接访问它,即您不能将 name. 运算符一起使用,例如 cat.name = "Jerry"。但是,由于 getName 方法是在 Animal 中声明的,因此可以访问 Animal 的私有(private)成员。此外,getNamepublic,因此我们可以在Cat 中访问它。

这意味着我们正在访问子类中父类(super class)的private 成员。这很明显。您可能对此感到困惑,因为很多

如何将 name 设置为 Tom: - name 是通过 Animal 的公共(public)构造函数设置的. Cat 的构造函数将 name 的值传递给 Animal 构造函数,后者随后对其进行设置。

编辑:当您说 Cat cat = new Cat("Tom"); 时,这意味着您只创建了一个对象。 Cat 的一个对象。您还没有创建 Animal 的对象。尽管调用了 Animal 的构造函数,但它并没有创建 Animal 的实例。在上面的例子中,属性 name 属于 Cat 而不是 Animal 的实例。

关于java - 扩展父类中私有(private)成员的层次结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23382871/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com