扩展父类中私有成员的层次结构

时间:2014-04-30 08:10:02

标签: java class extends

下面有两个类:

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"。

但是价值是动物还是猫的财产价值?如果是动物,为什么猫可以得到它?

2 个答案:

答案 0 :(得分:1)

属性name虽然在private 中声明为Animal,但在Cat中仍会继承。但是,我们无法直接访问它,即您无法name使用.运算符,例如cat.name = "Jerry"。但是,由于方法getNameAnimal中声明,因此可以访问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}}可以返回它。