多重继承指的是一个类可以同时从多于一个的父类那里继承行为和特征,然而我们知道 Java 为了保证数据安全,只允许单继承。

有些时候我们会认为如果系统中需要使用多重继承,那往往都是糟糕的设想,这时开发人员往往需要思考的不是怎么使用多重继承,而是他的设计是否存在问题。但是,有时候开发人员确实需要实现多重继承,而且现实生活中真正地存在这样的情况,例如遗传,我们既继承了父亲的行为和特征,也继承了母亲的行为和特征。

Java 提供的两种方法让我们实现多重继承:接口和内部类。

例 1

本节我们以生活中常见的遗传例子进行介绍,如儿子(或者女儿)是如何利用多重继承来继承父亲和母亲的优良基因的。

(1) 创建 Father 类,在该类中添加 strong() 方法。代码如下:

 

1. public class Father
2. {

3. public int strong()
4. { //强壮指数
5. return 9;
6. }
7. }

(2) 创建 Mother 类,在该类中添加 kind() 方法。代码如下:

 

1. public class Mother
2. {

3. public int kind()
4. { //友好指数
5. return 8;
6. }
7. }

(3) 重点在于儿子类的实现,创建 Son 类,在该类中通过内部类实现多重继承。代码如下:

 

1. public class Son
2. {

3. //内部类继承Father类
4. class Father_1 extends Father
5. {

6. public int strong()
7. {

8. return super.strong()+1;
9. }
10. }
11. class Mother_1 extends Mother
12. {

13. public int kind()
14. {

15. return super.kind()-2;
16. }
17. }
18. public int getStrong()
19. {

20. return new Father_1().strong();
21. }
22. public int getKind()
23. {

24. return new Mother_1().kind();
25. }
26. }

上述代码定义两个内部类,这两个内部类分别继承 Father(父亲)类和 Mother(母亲)类,且都可以获取各自父类的行为。这是内部类一个很重要的特性:内部类可以继承一个与外部类无关的类,从而保证内部类的独立性。正是基于这一点,多重继承才会成为可能。

(4) 创建 Test 类进行测试,在 main() 方法中实例化 Son 类的对象,然后分别调用该对象的 getStrong() 方法和 getKind() 方法。代码如下:

 

1. public class Test
2. {

3. public static void main(String[] args)
4. {

5. Son son=new Son();
6. System.out.println("Son 的强壮指数:"+son.getStrong());
7. System.out.println("Son 的友好指数:"+son.getKind());
8. }
9. }

执行上述代码,输出结果如下:

Son 的强壮指数:10 Son 的友好指数:6

从实现代码和输出结果可以发现,儿子继承父类,变得比父亲更加强壮;同时也继承了母类,只不过友好指数下降。