使用super()调用父类构造函数,导致属性赋值失败
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; } }
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); } }
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版
- 参与学习 人
- 提交作业 9393 份
- 解答问题 16556 个
综合就业常年第一,编程排行常年霸榜,无需脱产即可学习,北上广深月薪过万 无论你是未就业的学生还是想转行的在职人员,不需要基础,只要你有梦想,想高薪
了解课程
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星