公子鸢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入门第二季 升级版
531184 学习 · 6326 问题
相似问题
回答 3
回答 1