公子鸢3339632
2016-05-18 18:46
父类:
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?
你子类构造方法中调用的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
可以这样
Java入门第二季
531289 学习 · 6327 问题
相似问题
回答 3
回答 1