这样为什么不行十个字

579cdb89000152cc04080306.jpg

Goddess_chkx
浏览 2124回答 9
9回答

dreamertn9527

 java中每个类必须有一个构造函数,如果没有显示的声明构造函数,那么编译器会自动加一个无参的构造函数。当显示定义了带参数的构造函数之后,而没有显示的定义无参构造函数,那么这个类就没有无参构造函数了。 子类继承父类,必须在子类的构造函数中调用父类的构造函数,如果子类的构造函数中,没有显示的调用父类的构造函数,那么会自动调用父类的无参数构造函数,如果父类没有无参数构造函数,那么子类中必须显示的调用父类的构造函数(使用super关键字即可),而且必须是在构造方法的第一个语句 中进行调用。        PS:现在说说你的代码的问题,父类Animal没有显示的定义无参构造函数,所以只有有参构造函数,子类必须调用父类的构造方法(即父类的有参构造方法),用来初始化父类。(子类在执行过程中,先执行父类,所以必须初始化父类的构造器,避免出现错误)。// 父类Animal public class Animal { private String color; private String size; // 只定义了有参构造函数,未显示定义无参构造函数 public Animal(String color, String size){ this.color = color; this.size = size; } } // 子类Dog继承父类Animal class Dog extends Animal(){     // 子类继承父类,需要调用父类的构造方法,使用super关键字即可     public Dog(String color, String size, String test) { super(color, size); // 必须放在第一个构造函数第一行 } }下面是你想达到的效果:public class Animal { private String color; private String size; // 显示定义无参构造函数 public Animal(){} public Animal(String color, String size){ this.color = color; this.size = size; } } class Cat extends Animal{ public Cat(String color, String size, String test){ super(); // 其实也是调用了父类的无参构造方法,编译器默认调用而已,也可以不写该super() } }

qq___571

典型的多态问题 编译看父类运行看子类 构造方法也一样

好奇的小猪

子类重写父类的方法,参数类型和个数要一样。

大咪

父类中你没有定义boolean song,所以报错...也是不满足父类构造器中没有这个属性。。。。

Goddess_chkx

子类不满意父类的构造器,想重新写一个构造器,但是必须要调用父类的构造器,为什么必须要调用父类的构造器,是不是你后面说的要先创建父类对象,调用父类的构造器,然后再创建子类对象,调用子类的构造器。那它干嘛不去父类里调,要在子类里再写一遍,还有既然是先调用父类构造器,再调用子类构造器,为什么我图片中打印出来只有子类(我还以为是先打印父类再打印子类,不解)
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java