普通类继承抽象类并实现接口时,class声明必须先extends后implements,顺序不可颠倒;只能单继承但可多实现;所有抽象方法必须实现,除非该类也声明为abstract。

普通类继承抽象类并实现接口时,class 声明需先用 extends 继承抽象类,再用 implements 实现一个或多个接口,两者顺序固定,不能颠倒。
基本语法格式
格式如下:
class 类名 extends 抽象父类 implements 接口1, 接口2 { ... }- 只能单继承(一个
extends),但可多实现(多个接口,用逗号分隔) - 抽象类中未实现的抽象方法、以及所有接口中的抽象方法,都必须在该普通类中提供具体实现(除非该类也声明为
abstract)
一个典型示例
假设有抽象类 Animal 和接口 Flyable、Runnable:
abstract class Animal {
protected String name;
public Animal(String name) { this.name = name; }
public abstract void makeSound(); // 抽象方法
}
interface Flyable {
void fly();
}
interface Runnable {
void run();
}
普通类 Bird 继承 Animal 并实现两个接口:
class Bird extends Animal implements Flyable, Runnable {
public Bird(String name) {
super(name);
}
@Override
public void makeSound() {
System.out.println(name + " chirps");
}
@Override
public void fly() {
System.out.println(name + " is flying");
}
@Override
public void run() {
System.out.println(name + " is running");
}
}
注意事项
- 如果抽象类已有具体方法,子类可直接继承使用,无需重写
- 接口默认方法(
default)可不重写,但若多个接口有同名默认方法且无共同父接口,需在实现类中显式覆写以解决冲突 - 接口中的静态方法不能被实现,只能通过接口名调用
- 构造器不能继承,子类需显式定义构造器,并用
super(...)调用抽象父类构造器(如有参数)
常见错误写法
-
class Bird implements Flyable extends Animal—— 语法错误,extends必须在implements前 - 遗漏任一抽象方法实现(如没写
makeSound())—— 编译报错,除非把Bird也声明为abstract - 误把接口当类用
extends 接口名—— 接口只能implements或extends其他接口
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











