[javase学习笔记]-9.2 单继承与多重继承
2016-01-12 12:03
337 查看
这一节我们来看java中的单继承和多重继承。
在java语言中,支持的是单继承,不直接支持多继承,但是对C++中的多继承进行了改良。
那么什么是单继承和多继承呢?
单继承:一个子类只能有一个直接父类。
多继承:一个子类可以有多个直接父类。这个在java中是不允许的。
为什么不允许呢?我们看一个例子:
所以我们可以看到,java中不直接支持多继承的原因就是:当多个类中有相同成员时会产生调用的不确定性。
java语言中还支持多重继承。
比如下面的例子就是一个多重继承:
通过上面的继承体系我们不难看出,A实现的是最基本最基础的功能。
那么我们在实际开发中应该如何使用这个继承体系呢?
第一步:查看该体系中的顶层类(这里是A),了解该体系的基本功能。
第二步:创建体系中的最子类对象(这里是C),完成功能的使用。
通过上面的两步,我们就可以按需使用一个继承体系了。
这两节我们一直在说继承,在9.1中我们也说到继承可以提高代码的复用性,但是我们一定要注意:千万不要为了提高代码复用性去定义继承。
这是为什么呢?我们看下面例子:
这就让我们必须明确什么时候定义继承:当类与类之间存着所属关系时,就定义继承。
那么什么是所属关系呢?比如X是Y中的一种,就是说X属于Y,就是一种所属关系。
我们这样表示所属关系:is a 关系,就是所属关系。
所以当我们发现两个类是一种is a 关系时,我们就可以定义继承。
在java语言中,支持的是单继承,不直接支持多继承,但是对C++中的多继承进行了改良。
那么什么是单继承和多继承呢?
单继承:一个子类只能有一个直接父类。
多继承:一个子类可以有多个直接父类。这个在java中是不允许的。
为什么不允许呢?我们看一个例子:
class A { void method() { System.out.println("a"); } } class B { void method() { System.out.println("b"); } } class C extends A,B { }对于上面的情况,如果当我们调用C对象的method方法时,就会出现不确定性错误了,java也是以这个问题进行改良,从而不直接支持多继承。
所以我们可以看到,java中不直接支持多继承的原因就是:当多个类中有相同成员时会产生调用的不确定性。
java语言中还支持多重继承。
比如下面的例子就是一个多重继承:
class A { } class B extends A { } class C extends B { }这就是多重继承的形式,对于上面的继承,就出现了继承体系,而在这个继承体系中,A是最顶层类,C是对子类。
通过上面的继承体系我们不难看出,A实现的是最基本最基础的功能。
那么我们在实际开发中应该如何使用这个继承体系呢?
第一步:查看该体系中的顶层类(这里是A),了解该体系的基本功能。
第二步:创建体系中的最子类对象(这里是C),完成功能的使用。
通过上面的两步,我们就可以按需使用一个继承体系了。
这两节我们一直在说继承,在9.1中我们也说到继承可以提高代码的复用性,但是我们一定要注意:千万不要为了提高代码复用性去定义继承。
这是为什么呢?我们看下面例子:
class A { void method1(){} void method2(){} } class B { void method1(){} void method3(){} }我们发现两个类中都有method1方法,那么我们为了提高复用性而去继承:
class A { void method1(){} void method2(){} } class B extends A { void method3(){} }B类中确实有了method1方法,可以也同时继承了method2方法,但method2方法其实并不是B中的方法,这就出现了问题。
这就让我们必须明确什么时候定义继承:当类与类之间存着所属关系时,就定义继承。
那么什么是所属关系呢?比如X是Y中的一种,就是说X属于Y,就是一种所属关系。
我们这样表示所属关系:is a 关系,就是所属关系。
所以当我们发现两个类是一种is a 关系时,我们就可以定义继承。
相关文章推荐
- Java进阶(二十二)使用FileOutputStream写入文件
- Java进阶(二十二)使用FileOutputStream写入文件
- java中创建新进程的两种方法
- MySQL与Eclipse或者MyEclipse的连接
- Spring MVC 中 怎样从一个Controller 方法跳转到另一个方法,注意是跳转,不是调用
- 你不知道的JAVA
- 让JAVA代码跑得更快
- Struts2中DMI(动态方法调用)的一些问题
- 【JavaWeb Structs2学习】 用Action接受参数
- 关于Eclipse 插件添加右键菜单的三种方法
- 【Java基础 1】Java2平台的三个版本介绍
- 【Java 理论篇 1】Java2平台的三个版本介绍
- Struts2配置详解_配置Action
- Spring学习笔记---2.1-IOC容器解析Bean配置信息
- 深入讲解Struts2的用法
- JAVA相对路径、绝对路径
- java String 常用方法
- MyEclipse有关propedit editor插件的相关问题
- Android Studio使用SVN,与eclipse共同开发。
- eclipse-项目配置文件