目录
第一题
代码
package com.hspedu.extends_.exercise;
public class ExtendsExercise01 {
public static void main(String[] args) {
B b = new B();
}
}
class A {
A(){//默认的无参构造器
System.out.println("a");
}
A(String name){
System.out.println("a name");
}
}
class B extends A {
B(){
//已经有this就不会有super了
this("abc");
System.out.println("b");
}
B(String name){
super();
System.out.println("b name");
}
}
输出流程分析
1)调用B类无参构造器,因为构造器内第一行有this(),所以不会再调用父类的无参构造器
2)执行this("abc");
3)执行super();
4)执行父类即A类的无参构造器,输出a(第一次输出)
5)输出b name(第二次输出)
6)输出 b (第三次输出)
运行结果
考察知识点
1)当创建子类对象时, 不管使用子类的哪个构造器, 默认情况下总会去调用父类的无参构造器
2)在构造器中,this()和super()不能同时使用
第二题
代码
package com.hspedu.extends_.exercise;
public class ExtendsExercise02 {
public static void main(String[] args) {
C1 c1 = new C1();
}
}
class A1 {
public A1(){
System.out.println("我是A类");
}
}
class B1 extends A1 {
public B1(){
System.out.println("我是B类的无参构造");
}
public B1(String name) {
System.out.println(name + "我是B类的有参构造");
}
}
class C1 extends B1 {
public C1() {
this("hello");
System.out.println("我是c类的无参构造");
}