这一节我们来看java中的单继承和多重继承。
**在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 关系时,我们就可以定义继承。
- 前言
- 1.1 基本常识
- 1.2 Java语言概述
- 1.3 Java语言的环境搭建
- 1.4 Java程序开发之初体验--Hello World
- 2.1 关键字
- 2.2 标识符
- 2.3 注释
- 2.4 常量
- 2.5 进制扫盲
- 2.6 变量和数据类型(1)
- 2.7 变量和数据类型(2)
- 2.8 运算符
- 3.1 if语句
- 3.2 switch语句
- 3.3 while和do-while语句
- 3.4 for语句
- 3.5 for循环的嵌套
- 3.6 break语句与continue语句
- 4.1 函数的定义
- 4.2 定义函数的两个明确
- 4.3 函数的内存加载过程
- 4.4 函数的重载
- 5.1 数组的定义
- 5.2 数组的内存分配及特点
- 5.3 数组操作中常见问题
- 5.4 数组常用操作(1)
- 5.5 数组常用操作(2)
- 5.6 二维数组
- 6.1 面向对象的概述
- 6.2 类与对象的关系
- 6.3 对象的内存体现
- 6.4 成员变量与局部变量
- 6.5 类类型参数与匿名对象
- 6.6 基本数据类型参数与引用数据类型参数的传递过程
- 6.7 封装
- 7.1 构造函数概述与默认构造函数
- 7.2 构造函数与一般函数的区别
- 7.3 构造函数的重载
- 7.4 构造函数的内存加载
- 7.5 构造函数需要注意的几个细节
- 7.6 this关键字的原理
- 7.7 this关键字的细节与应用
- 8.1 static关键字之特点
- 8.2 成员变量与静态变量的区别
- 8.3 static关键字使用的注意细节
- 8.4 main函数的解析与细节
- 8.5 static关键字的使用场景
- 8.6 静态的内存加载
- 8.7 静态代码块
- 8.8 构造代码块
- 9.1 继承
- 9.2 单继承与多重继承
- 9.3 子父类中成员变量特征体现