为了账号安全,请及时绑定邮箱和手机立即绑定

这样为什么不行十个字

这样为什么不行十个字

Goddess_chkx 2016-07-31 00:55:55
查看完整描述

9 回答

?
dreamertn9527

TA贡献3条经验 获得超4个赞

  •  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()
	}
}


查看完整回答
4 反对 回复 2016-07-31
?
qq___571

TA贡献11条经验 获得超1个赞

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

查看完整回答
反对 回复 2016-07-31
?
好奇的小猪

TA贡献1条经验 获得超0个赞

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

查看完整回答
反对 回复 2016-07-31
?
大咪

TA贡献785条经验 获得超332个赞

579d9c2c0001db2e05000198.jpg

579d9c2d0001fe0e05000203.jpg



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


查看完整回答
反对 回复 2016-07-31
  • Goddess_chkx
    Goddess_chkx
    帮我看一下底下一个我的回复,帮我解答一下
  • 大咪
    大咪
    下面那个问题其实也是你输出的问题,在子类dog类中你在控制台输出的不是子类吗,而父类的构造方法在控制台输出也要写在父类里的呀,所以你写system.out父类这句话应该写在animal类中,这样当你调用子类方法时候,父类的构造方法会先打印输出,然后在显示子类的构造方法。。你可以试试,看看是不是这样
  • Goddess_chkx
    Goddess_chkx
    谢谢,看懂了,手机没有收不到你的回复提示,现在才看到,抱歉。
点击展开后面1
?
Goddess_chkx

TA贡献15条经验 获得超30个赞

子类不满意父类的构造器,想重新写一个构造器,但是必须要调用父类的构造器,为什么必须要调用父类的构造器,是不是你后面说的要先创建父类对象,调用父类的构造器,然后再创建子类对象,调用子类的构造器。那它干嘛不去父类里调,要在子类里再写一遍,还有既然是先调用父类构造器,再调用子类构造器,为什么我图片中打印出来只有子类(我还以为是先打印父类再打印子类,不解)
579d81510001acbf04080306.jpg

查看完整回答
反对 回复 2016-07-31
  • dreamertn9527
    dreamertn9527
    对,子类执行需要初始化父类。而我们知道,父类初始化就是通过构造器初始化的,所以需要子类调用父类构造器进行舒适化。还有,你子类那个调用父类写的有问题。不是你那样的啊
  • 9 回答
  • 0 关注
  • 2123 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信