想了解Java对于多重继承是怎么实现的?我们先从继承的概念上先了解下单继承和多重继承。
一、继承的概念
继承是面向对象编程的一种特性,是拓展原有类功能实现代码复用的一种方式。
多重继承指的是一个类可以同时从多于一个父类继承行为和特征。
单继承指的是一个类只能继承一个父类的行为和特征。
学过Java的人都知道,它为了保证数据安全,只允许单继承。但是实际的应用中确实需要实现多重继承。Java中可以使用接口和内部类实现类似于多重继承的效果。
二、Java中实现多继承
1.接口
在Java中一个类可以多重实现,但不能多重继承,也就是说一个类能够同时实现多个接口,但不能同时继承多个类。
interface CanFight {
void fight();
}
interface CanSwim {
void swim();
}
interface CanFly {
void fly();
}
class ActionCharacter {
public void fight() {
System.out.println("I can fight.");
}
}
class Hero extends ActionCharacter implements CanFight, CanFly, CanSwim {
public void fly() {
System.out.println("I can fly.");
}
public void swim() {
System.out.println("I can swim.");
}
}
class AdventureCharacter {
public static void fc(CanFight x) {
x.fight();
}
public static void cs(CanSwim x) {
x.swim();
}
public static void cf(CanFly x) {
x.fly();
}
public static void ac(ActionCharacter x) {
x.fight();
}
public static void main(String[] args) {
Hero h = new Hero();
fc(h);
cf(h);
cs(h);
ac(h);
}
}
上面的实例是通过接口的方式间接实现了Java的多重继承。
运行结果:
I can fight.
I can fly.
I can swim.
I can fight.
2.内部类
接口实现多重继承是一种比较可行和普遍的方式。如果父类为抽象类或者具体类时,那么就只能通过内部类实现多重继承。
class A {
void showA() {
System.out.println("Show A");
}
}
class B {
void showB() {
System.out.println("Show B");
}
}
public class MultiInheritanceExample {
class C extends A {
void showC() {
System.out.println("Show C");
}
}
class D extends B {
void showD() {
System.out.println("Show D");
}
}
public static void main(String[] args) {
MultiInheritanceExample example = new MultiInheritanceExample();
// 通过内部类C继承A
C c = example.new C();
c.showA();
c.showC();
// 通过内部类D继承B
D d = example.new D();
d.showB();
d.showD();
}
}
在这个例子中,C
和 D
分别是内部类,它们分别继承自 A
和 B
,实现了多重继承的效果。这样,C
既拥有 A
的特性,也拥有 B
的特性,D
同理。
内部类一个重要的特性:内部类可以继承一个与外部类无关的类,保证了内部类的独立性,正是基于这一点,多重继承才会成为可能。
以上是基于接口和内部类对于Java实现多重继承的两种方式。