Java通过抽象类与接口组合实现“混合继承”:子类继承抽象类获得共通逻辑,并实现多个接口以扩展多样化行为,如Duck类继承Animal并实现Flyable和Swimmable,兼具飞行与游泳能力,而Dog仅继承Animal,体现灵活复用与多态性。

Java中不支持多继承,也就是说一个类不能直接继承多个类。但可以通过抽象类与接口的组合方式实现功能上的“混合继承”。这种设计既能复用抽象类中的代码,又能通过接口扩展多种行为特征。
抽象类提供基础实现
抽象类可以包含已实现的方法、成员变量以及抽象方法。子类通过extends关键字继承它,获得共通逻辑。
例如,定义一个表示“动物”的抽象类:
abstract class Animal { protected String name; public Animal(String name) { this.name = name; } // 具体方法 public void sleep() { System.out.println(name + " 正在睡觉"); } // 抽象方法,由子类实现 public abstract void makeSound(); }
接口定义可选行为
接口用于定义对象能做什么,适合表达“具备某种能力”。一个类可以实现多个接口,从而拥有多种行为。
立即学习“Java免费学习笔记(深入)”;
比如定义两个能力接口:
interface Flyable { void fly(); } interface Swimmable { void swim(); }
这样,不同动物可以根据实际情况选择实现哪些能力。
子类结合继承与实现
具体类通过继承抽象类并实现一个或多个接口,达到混合效果。
以“鸭子”为例,它既是动物,又能飞和游泳:
class Duck extends Animal implements Flyable, Swimmable { public Duck(String name) { super(name); } @Override public void makeSound() { System.out.println(name + " 呱呱叫"); } @Override public void fly() { System.out.println(name + " 正在飞行"); } @Override public void swim() { System.out.println(name + " 正在游泳"); } }
而“狗”可能只会叫和跑,不需要实现所有接口:
class Dog extends Animal { public Dog(String name) { super(name); } @Override public void makeSound() { System.out.println(name + " 汪汪叫"); } }
使用示例
测试代码展示多态性:
public class Main { public static void main(String[] args) { Duck duck = new Duck("唐老鸭"); duck.makeSound(); // 呱呱叫 duck.fly(); // 实现Flyable duck.swim(); // 实现Swimmable duck.sleep(); // 继承自Animal Dog dog = new Dog("旺财"); dog.makeSound(); // 汪汪叫 dog.sleep(); // 继承自Animal } }
这种方式让类既有统一的基础结构(来自抽象类),又灵活地扩展各种能力(来自接口)。基本上就这些,不复杂但容易忽略细节。


