java中extends关键字用于单继承,子类只能继承一个父类以避免菱形继承问题;子类继承父类非private成员但不继承构造器和private成员;必须显式调用父类构造器(super),且不可与this共存;final类不可被继承;extends仅用于类继承类,接口实现用implements。

Java中extends关键字用于声明一个类继承另一个类,且只允许单继承——即一个子类只能直接继承一个父类。这是Java语言的设计原则,用以避免多重继承带来的复杂性和歧义(比如菱形继承问题)。
基本语法格式
子类通过extends关键字继承父类,语法简洁明确:
- 父类可以是普通类,不能是final类(否则无法被继承)
- 子类会自动获得父类的非private成员(字段、方法),但构造器不会被继承
- 子类可重写(override)父类的非final、非private方法
示例:
class Animal {
protected String name;
public Animal(String name) {
this.name = name;
}
public void speak() {
System.out.println(name + " 发出声音");
}
}
class Dog extends Animal { // Dog 继承 Animal
public Dog(String name) {
super(name); // 调用父类构造器
}
@Override
public void speak() {
System.out.println(name + " 汪汪叫");
}
}
必须调用父类构造器
子类构造器中,若父类没有无参构造器,必须显式使用super(...)调用父类带参构造器,且该语句必须是子类构造器的第一行。
- 如果父类只有带参构造器,子类构造器里不写
super会编译报错 -
super()和this()不能共存于同一构造器中 - 不写
super(...)时,编译器默认插入super()——前提是父类有无参构造器
不能继承的内容
虽然extends建立继承关系,但以下内容不会被子类继承:
- 父类的
private字段和方法(子类不可见,但可通过public/protected getter/setter间接访问) - 父类的构造器(子类需用自己的构造器,并通过
super复用父类初始化逻辑) - 被
final修饰的类(如String)无法被继承
与接口实现的区别
extends只用于类继承类(单继承),而实现接口用implements,且支持多实现:
-
class Cat extends Animal implements Runnable, Serializable是合法的 - 一个类可以
extends一个父类,同时implements多个接口 - 接口之间才用
extends(支持多继承),如interface A extends B, C
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











