這一節我們來看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 子父類中成員變量特征體現