以下代码执行后的结果是:
(1)Person static10
(2)Student static99
{}Person
(3)Persion100lishi
{}Student
(4)Student100lishi
(5)Student名
问:执行Person的构造代码块({}Person)后为什么是执行父类的构造方法((3)Persion100lishi),而不是执行子类的构造代码块({}Student)?
如果是因为子类执行了super(age);而先去执行父类中的构造方法((3)Persion100lishi),那么执行完后为什么不是回来执行子类的构造函数((4)Student100lishi)而是又先执行了子类中的构造代码块({}Student);,而且构造代码块不是优先与构造函数执行的吗?
- class ExtendsTest
- {
- public static void main(String[] args)
- {
- Student s=new Student(100,"名");
- }
- }
- //----------------------------------------------Person.class
- class Person
- {
- public static int age=10;
- String name="lishi";
- //静态代码块
- static
- {
- System.out.println("(1)Person static"+age);
- }
- //构造代码块
- {
- System.out.println("{}Person");
- }
- //构造方法
- public Person(int age)
- {
- this.age=age;
- System.out.println("(3)Persion"+age+name);
- }
- }
- //---------------------------------------------Student.class
- class Student extends Person
- {
- static int ss=99;
- //静态代码块
- static
- {
- System.out.println("(2)Student static"+ss);
- }
- //构造代码块
- {
- System.out.println("{}Student");
- }
- //构造方法
- Student(int age)
- {
- super(age);
- System.out.println("(4)Student"+age+name);
- }
- Student(int age,String name)
- {
- this(age);
- this.name=name;
- System.out.println("(5)Student"+name);
- }
- }
复制代码 |