温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

java超类构造方法吗

发布时间:2026-09-20 11:59:14 来源:亿速云 阅读:89 作者:小樊 栏目:编程语言

在 Java 里,“超类”就是父类( superclass ),所谓“超类构造方法”通常指 父类的构造方法,以及子类如何调用父类构造方法。下面系统讲一下。


1️⃣ 父类构造方法的基本特点

  • 构造方法 不能被继承
  • 子类 不会自动拥有 父类的构造方法
  • 子类创建对象时,必须先调用父类构造方法

2️⃣ 默认情况下:自动调用父类无参构造

如果父类有 无参构造方法(或没写构造方法),子类会隐式调用:

class Animal {
    Animal() {
        System.out.println("Animal 构造");
    }
}

class Dog extends Animal {
    Dog() {
        // 隐式调用 super()
        System.out.println("Dog 构造");
    }
}

执行:

new Dog();

输出:

Animal 构造
Dog 构造

3️⃣ 使用 super() 显式调用父类构造

✅ 调用父类无参构造

class Dog extends Animal {
    Dog() {
        super(); // 可写可不写
    }
}

✅ 调用父类有参构造

class Animal {
    Animal(String name) {
        System.out.println(name);
    }
}

class Dog extends Animal {
    Dog() {
        super("小狗");
    }
}

⚠️ 注意:

  • super() 必须放在子类构造方法的第一行
  • 不能和 this() 同时使用

4️⃣ 如果父类没有无参构造会怎样?

❌ 编译错误示例:

class Animal {
    Animal(String name) {}
}

class Dog extends Animal {
    Dog() {
        // 编译器找不到 Animal()
    }
}

✅ 正确写法:

class Dog extends Animal {
    Dog() {
        super("小狗");
    }
}

5️⃣ this()super() 的关系

  • this():调用本类其他构造方法
  • super():调用父类构造方法
  • 二者只能出现一个,且必须第一行
class Dog extends Animal {
    Dog() {
        this("小狗");
    }

    Dog(String name) {
        super(name);
    }
}

6️⃣ 构造方法执行顺序(重点)

从父类到子类,一层层执行

class A {
    A() { System.out.println("A"); }
}

class B extends A {
    B() { System.out.println("B"); }
}

class C extends B {
    C() { System.out.println("C"); }
}
new C();

输出:

A
B
C

7️⃣ 常见面试题

子类构造方法能不调用父类构造吗?
❌ 不能,编译器会自动加 super()

父类私有构造方法能被子类继承吗?
❌ 不能,但子类仍可调用(如果是同包或内部类)


如果你愿意,我也可以:

  • 图示 讲继承构造流程
  • 结合 抽象类 / 接口
  • 出几道 构造方法练习题

你想看哪一种?

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI