使用super()调用父类构造函数,导致属性赋值失败

使用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

这是怎么回事

正在回答

登陆购买课程后可参与讨论,去登陆

3回答

 同学你好,使用private修饰,this.name=name是给本类中的name属性赋值,子类中调用父类构造方法也不能给子类对象赋值。 

祝学习愉快

  • mahsiaoko 提问者 #1
    好的,谢谢老师!
    2020-06-03 10:59:22
好帮手慕阿园 2020-06-02 18:50:09

同学你好,他们都是给属性赋值,setXxx方法一般是提供给外部类调用的;如果在本类中的赋值可以用 this.xxx=xxx  但是如果在其他类中赋值,就只能用setXxx 了

如果我的回答解决了你的疑惑,请采纳,祝学习愉快~


  • 提问者 mahsiaoko #1
    因为这里属性使用private修饰吗?所以在子类中调用构造函数也不能给这些属性赋值
    2020-06-02 20:16:39
好帮手慕阿园 2020-06-02 16:23:09

 同学你好,调用父类的构造方法给属性赋值,父类带参构造方法中应该是使用this.setName(name);this.setAge(age);给方法给name,age属性赋值,而不是this.name=name;this.age=age; 

http://img1.sycdn.imooc.com//climg/5ed60c610823061104450155.jpg

如果我的回答解决了你的疑惑,请采纳,祝学习愉快~


  • 提问者 mahsiaoko #1
    这个我发现了,使用set可以赋值,但是为什么this. name=name就不行呢,
    2020-06-02 16:27:56
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师