使用super()调用父类构造函数,导致属性赋值失败
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | public abstract class Animal { private String name; private int age; public Animal(){ } public Animal(String name, int age) { this .age=age; this .name=name; } public String getName() { return this .name; } public void setName(String name) { this .name = name; } public int getAge() { return this .age; } public void setAge( int age) { this .age = age; } } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 | public class Cat extends Animal{ private String name; private int age; @Override public String getName() { return name; } @Override public void setName(String name) { this .name = name; } @Override public int getAge() { return age; } @Override public void setAge( int age) { this .age = age; } public Cat(){ } public Cat(String name, int age){ // this.name=name; // this.age=age; super (name,age); } } |
1 2 3 4 5 6 7 8 9 10 | public class Test { public static void main(String[] args) { Animal one= new Cat( "huahua" , 10 ); System.out.println(one.getName()); System.out.println(one.getAge()); Cat cat=(Cat)one; System.out.println(cat.getName()); System.out.println(cat.getAge()); } } |
运行结果为:
null
0
null
0
这是怎么回事
35
收起
正在回答
3回答
同学你好,使用private修饰,this.name=name是给本类中的name属性赋值,子类中调用父类构造方法也不能给子类对象赋值。
祝学习愉快
java工程师2020版
- 参与学习 人
- 提交作业 9403 份
- 解答问题 16556 个
综合就业常年第一,编程排行常年霸榜,无需脱产即可学习,北上广深月薪过万 无论你是未就业的学生还是想转行的在职人员,不需要基础,只要你有梦想,想高薪
了解课程
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧