java调用父类有参构造函数_Java有参数的父类构造函数调用过程

public abstract class Animal{

private String name;

public String getName(){

return name;

}

public Animal(String theName){

name = theName;

}

}

public class Hippo extends Animal{

public Hippo(String name){

super(name);

}

}

public class MakeHippo{

public static void main(String[] args){

Hippo h = new Hippo("Buffy");

System.out.println(h.getName());

}

}

输出结果是Buff

我没看懂name传递过程中new Hippo (“Buffy”)变量传递给构造函数public Hippo(String name)后是怎么传递给return name返回上去的 super(name)引用的是什么,求解释运行过程。 十分感谢

你把

super(name)

,看成

this.Animal(name)

就好理解了。

换句话说,就是把子类的实例作为

this

去调用父类的构造函数。

如果你懂JavaScript就更好理解了,等价于:

Animal.call(this, name);

创建一个Hippo对象h,实例化

调用Hippo构造方法

super(name)调用父类(也称超类)Animal的构造方法

这里为什么不在子类里直接this.name = name?

因为name是父类的私有属性,访问不到。需要调用父类里面的public修饰的方法来操作,比如调用父类构造方法把你的初始化参数传过去。后面如果想修改name,肯定需要父类里面有个public的setName方法。

这就好比你父母的财产,是他们的私有财产,作为孩子也不能想拿就拿。父母需要同意你使用,OK给你public授权的get set方法,你就可以动这笔钱了。

调用h对象的getName方法。在子类中没找到,然后去父类中找,找到了然后调用。

为什么不在子类中直接写个getName呢?

还是上面的问题,父类private属性,子类中访问不到,肯定要在父类里面写个public的方法。

可是子类里并没有这个方法,不会报错吗?

父类中的public方法,子类是直接继承的。

Java的方法调用都会隐式的传入调用对象,比如:

Hippo h = new Hippo("Buffy");

System.out.println(h.getName());

//h.getName() 实际上就是Hippo.getName(h)

//在你new一个Hippo对象的时候,如果其父类存在无参数的构造方法且被调用的构造方法第一步不是调用父类构造方法的情况下会调用父类的无参数构造方法,当然你这里显示的调用了父类有参数的构造方法

//super(name) 就相当于 Animal(this,name)调用父类构造方法,这里this是指你new出来的对象,也就是一个Hippo实例对象。

//h.getName() Hippo类并没有getName方法,会调用父类的getName方法,这一点是java的多态性的体现。

父类是如何接收的

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值