子类实例化时候调用父类带参构造方法出错
这是父类信息
public class Animal {
// 属性:kind(种类)
private String kind;
public Animal() {
}
//创建带参(king为参数)构造函数
public Animal(String kind) {
this.kind = kind;
}
这是子类
public class Cat extends Animal {
public Cat() {
super(kind);//系统显示出错
}
我希望实例化子类的时候,加载的是父类带参构造方法,所以我在子类无参构造方法中,第一行加了super(kind)特意指明我要调用父类的带参,构造方法,但是系统出错,一直不明白错在哪?如果是调用父类无参的构造方法,super();就可以
正在回答 回答被采纳积分+1
kind,你是要用父类的private String kind的话,那直接改为public String kind;
如果是调用父类的有参,那程序会先执行父类构造方法(父static->子static->父无static->子无static),而此时子类的的kind没有定义值并进入父类执行,类型不定义肯定不行,所以编译错误.
以下两点为解决方法:
①在子类定义变量kind类型,并且添加为static,这样走在父类有参构造前,如
static String kind;
public Cat() {
super(kind);
}即可顺利编译
②子类使用有参方法调用父类有参方法,如下:
public Cat(String kind) {
super(kind);
}
建议第二种,课程中的
希望能解答你这个问题.
创建一个Cat a=new Cat(),然后a就会运行到public Cat()无参构造,然后运行到super(kind),跳到
public Animal(String kind) {
this.kind = kind;
}
全程没有对变量kind赋值的地方,在public Cat()无参构造中添加个参数可能就对了,至于这么写为啥不对,我也不知道,有没有大神解答下,持续关注中
- 参与学习 人
- 提交作业 7317 份
- 解答问题 14452 个
想要入门学编程?多年一直活跃在编程语言排行版前列的Java是一个很好的选择。本路径将从Java基础语法、面向对象、常用工具类三部分,为你开启软件开发的大门!
了解课程
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星