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

关于如何在子类的构造方法中显示调用父类有参的构造方法?

父类:
public class Animal {
	public int age = 20;
	public String name;
	public void eat(){
		System.out.println("动物具有吃东西的能力");
	}
	/*public Animal(){
		System.out.println("Animal类执行了");
	}*/
	public Animal(int age){
		this.age = age;
		System.out.println(age);
	}

}


子类:
public class Dog extends Animal {
	public static int age = 15;
	public void eat(){
		System.out.println("狗具有吃骨头的能力");
	}
	public Dog(){
		super(age);
		System.out.println("dog类执行了");
	}
	public void method(){
		super.eat();
	}
}
我在定义时为什么要在子类的age属性定义前加static?
既然是父类的age 为何我在调用method()时输出的age是15而不是父类的20?


正在回答

2 回答

你子类构造方法中调用的age是Static的age,就是子类的age,首先回答static的问题,static是静态的意思,即未创建实例对象就可以使用被static声明的属性,如果你不加static,在创建Dog类时,1.首先进行父类的默认值初始化,就是age=20,2.然后调用父类构造函数,3.再进行子类默认值初始化,即age=15,4.再调用子类构造函数,在第二步时,发现父类构造方法需要传一个值(super(age);)这时候编译器找age,发现找不到age,因为这时候还没有进行到第三步啊,age没有初始化为15,报错,而将其声明为static,即使不创建对象age都是15,这就不必解释了,所以要加static

第二个问题,就像之前所说的一样,加了static之后,进行第二步时,将age=15传给父类,修改了父类中的age值,导致父类和子类的age都是15,所以无论怎么输出都是15

0 回复 有任何疑惑可以回复我~

http://img1.sycdn.imooc.com//573fcb5d00017c9e12300414.jpg可以这样

0 回复 有任何疑惑可以回复我~
#1

慕粉15555107797

你这个都没有用到构造方法,,,他想说的是用构造方法怎么样能得到父类的age
2016-06-28 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

关于如何在子类的构造方法中显示调用父类有参的构造方法?

我要回答 关注问题
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号