面向對象的三個特性:
1. 封裝(以對象的形式來體現)
2. 繼承
3. 多態
繼承的好處:
1. 提高代碼的複用性
2. 讓類與類之間產生了關係,給 面向對象 的第三個特徵多態提供前提。
Java中僅支持單繼承,不支持多繼承,但對C++中的多繼承機制進行改良。
1. 單繼承:一個子類僅有一個父類
2. 多繼承:一個子類可以有多個直接父類
1)不直接支持,因爲多個父類中有相同成員,會產生調用的不確定性
2)在java中是通過“多實現”的方式來體現Java支持多重繼承。
當使用繼承體系時;
1. 查看該體系中的頂層類,瞭解該體系的基本功能
2. 創建體系中的最子類對象,完成功能的使用
什麼時候定義繼承?
1. 當類與類之間存在所屬關係的時候,就定義繼承(定義繼承的時候,實際上是向上抽取分析的逆過程)
2. 在子父類中,成員的特點體現:
1). 成員變量
當本類的成員和局部變量同名時用this區分
當子父類中的成員變量同名用super區分父類
This和super用法很相似
This:代表一個本類對象的引用
Super:並不代表父類對象的引用,而是代表一個父類的空間
2). 成員函數
當子父類中出現成員函數一模一樣的情況,會運行子類的函數
這種現象,稱爲覆蓋操作,這是函數在子父類中的特性
函數兩個特性:重載 和 覆蓋
重載:在同一個類中
覆蓋:在子父類中,也稱爲重寫
覆蓋注意事項:
子類覆蓋父類方法時,子類權限必須要大於或者等於父類的權限。
什麼時候使用覆蓋操作?
當對一個類進行子類的擴展時,子類需要保留父類的功能聲明;但是要定義子類中
該功能的特有內容時,就使用覆蓋操作完成。
class Phone
{
public void show()
{
System.out.println("number");
}
public void call()
{
System.out.println("call");
}
}
class NewPhone extends Phone
{
public void show(String name)
{
System.out.println(name);
super.show();
}
}
class PhoneDemo
{
public static void main(String[] args)
{
NewPhone p = new NewPhone();
p.show("keyman");
p.call();
//System.out.println("Hello World!");
}
}
3). 構造函數
在子類構造對象時,發現,訪問子類構造函數時,父類也運行了。因爲在子類的構造函
數中第一行有一個默認的隱式語句。Super();
對於構造函數,不可能出現覆蓋的情況,因爲類名不可能重複,而構造函數的名稱與類名
相同,因此構造函數不可能出現覆蓋的情況。