私有属性的问题
public class Animal {
private String name;
//无参构造方法
public Animal() {
}
//多参构造方法
public Animal(String name) {
this.setName(name);
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
============================================================
public class Cat extends Animal {
private int month;
// 无参构造方法
public Cat() {
}
// 多参构造方法
public Cat(String name, int month) {
this.setName(name);
this.setMonth(month);
}
public int getMonth() {
return month;
}
public void setMonth(int month) {
this.month = month;
}
}
===========================================================
public class Test {
public static void main(String[] args) {
Cat cat=new Cat("小花",2);
System.out.println("它叫" + cat.getName());
}
}老师之前说,父类的私有属性不能够被继承,但是cat对象为什么可以输出名字呢?它没有name这个属性
但是为什么可以输出呢?我觉得很困扰,我想知道不能够继承是什么意思,是单纯的不能够调用,还是什么意思,请老师解答一下
正在回答
同学,你好!关于属性的继承问题,Java中是这么设计的,同学可以当做是一种语法去记忆。虽然不能继承父类私有属性,但是当return name时,确实可以获取子类对象的name属性。

如果我的回答解决了你的疑惑,请采纳!祝学习愉快!
同学你好,子类能够继承父类的属性和方法,但不能继承父类中private修饰的属性和方法。
这里能够输出的原因是:
在Test类中调用Cat的带参构造方法。

在Cat的带参构造方法中,调用this.setName(),this.setMonth()方法。
显而易见,Cat类中是没有setName方法的。

但是它继承了Animal类,我们来到Animal类中。

发现setName()方法是由public修饰的,所以它能够被子类继承,在Cat方法可以使用this.setName()为属性name赋值。
最后,Animal类中的getName()方法同样是public所修饰,能够被Cat继承,所以在main方法中创建Cat对象后,可以通过Cat对象调用getName()方法获取name的值。

如果我的回答解决了你的疑惑,请采纳。祝:学习愉快~
- 参与学习 人
- 提交作业 3802 份
- 解答问题 11489 个
本阶段带你迈入Java世界,学习Java必备基础知识,基础语法、面向对象思想以及常用工具类的使用。
了解课程
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星