1、继承的初始化顺序
a、初始化父类再初始化子类
b、先执行初始化对象中属性,再执行构造方法中的初始化
eg:a
public class Animal{
public int age;
public string name;
public void eat(){
System.out.println(" 年龄"+age+"动物可以吃东西")
}
public Animal(){
System.out.println(" Animal 类执行了")
}
}
public class Dog extends Animal{
public Dog(){
System.out.println(" Dog 类执行了")
}
}
public class Initail{
public static void main(String【】 args){
Dog dog = new Dog();
dog . age =10;
dog . name =nini;
}
}
输出结果:Animal 类执行了
Dog 类执行了
eg:b
public class Animal{
public int age = 10;
public string name;
public void eat(){
System.out.println(" 年龄"+age+"动物可以吃东西")
}
public Animal(){
age = 20;
}
}
public class Dog extends Animal{
}
public class Initail{
public static void main(String【】 args){
Animal animal = new Animal();
System.out.println(" animal age:" +animal.age)
}
}
输出结果:animal age:20 //此时说明是 先执行初始化对象中属性 再执行构造方法中的初始化 因为age先被赋值 10 后被20 覆盖了
2、 父类对象--->属性初始化--->构造方法
子类对象--->属性初始化--->构造方法
a、初始化父类再初始化子类
b、先执行初始化对象中属性,再执行构造方法中的初始化
eg:a
public class Animal{
public int age;
public string name;
public void eat(){
System.out.println(" 年龄"+age+"动物可以吃东西")
}
public Animal(){
System.out.println(" Animal 类执行了")
}
}
public class Dog extends Animal{
public Dog(){
System.out.println(" Dog 类执行了")
}
}
public class Initail{
public static void main(String【】 args){
Dog dog = new Dog();
dog . age =10;
dog . name =nini;
}
}
输出结果:Animal 类执行了
Dog 类执行了
eg:b
public class Animal{
public int age = 10;
public string name;
public void eat(){
System.out.println(" 年龄"+age+"动物可以吃东西")
}
public Animal(){
age = 20;
}
}
public class Dog extends Animal{
}
public class Initail{
public static void main(String【】 args){
Animal animal = new Animal();
System.out.println(" animal age:" +animal.age)
}
}
输出结果:animal age:20 //此时说明是 先执行初始化对象中属性 再执行构造方法中的初始化 因为age先被赋值 10 后被20 覆盖了
2、 父类对象--->属性初始化--->构造方法
子类对象--->属性初始化--->构造方法