黑馬程式設計師----Java基礎之面向物件(封裝 繼承 多型)(二)
------- <a href="http://www.itheima.com" target="blank">android培訓</a>、<a href="http://www.itheima.com" target="blank">java培訓</a>、期待與您交流! ---------
抽象類
抽象類的特點:
1. 抽象方法一定要再抽象類中
2. 抽象方法和抽象類都必須被abstract關鍵字修飾
3. 抽象類不可以用new穿件物件.因為呼叫抽象方法沒意義.
4. 抽象類中的方法要被使用,必須由子類複寫其所有的抽象方法後,建立子類物件呼叫,如果子類只覆蓋了部分抽象方法,那麼該子類還是一個抽象類
例如:
abstract class A//抽象類
{
abstract void show();//抽象方法
}
class B extends A
{
void show(){}
}
抽象類和一般類沒什麼大的區別,該如何描述事物就如何描述事物,只不過,該事物出現了一些看不懂的東西,這些不確定的部分,也是該事物的功能,需要明確出現,但是無法定義主體
特殊:抽象類中可以不定義抽象方法,這樣做僅僅是不讓該類建立物件
練習:假如我們在開發一個系統時需要對員工進行建模:員工包含三個屬性:姓名,工號以及工資,經理也是員工,除了含有員工的屬性外,還有另一個獎金屬性.請使用繼承的思想設計出員工類和經理類.要求類中提供必要的方法進行屬性的訪問
模版方法:
在定義功能時,功能的一部分是確定的,但是有一部分是不確定的,而確定的部分在使用不確定的部分,那麼這時就將不確定的部分暴露出去,有該類的子類去完成
例子:獲取一段程式執行的時間
介面
格式:interface {}
介面中的成員修飾符是固定的
成員常量: public static final
成員函式: public abstract
介面的出現將"多繼承"通過另一種形式體現出來,即"多種實現";
介面也可以認為是一個特殊的抽象類
當抽象類中的方法都是抽象的,那麼該類可以通過介面的形式來表示.
class用於定義類
interface用於定義介面
介面是不可以建立物件的,因為有抽象方法.
需要被子類實現,子類對介面中的抽象方法全都覆蓋後,才可以例項化,否則子類還是一個抽象類
一個類可以實現多個介面
interface Inner
{
public abstract void run();
}
interface Inter
{
public abstract void show();
}
class Test
{
}
class Demo extends Test implements Inner,Inter
{
public abstract void run(){}
public abstract void show(){}
}
介面的特點
介面是對外暴露的規則
介面是程式的功能的擴充套件
介面可以用來多實現
類與介面之間是實現關係,而且類可以繼承一個類的同時實現多個介面
介面與介面之間可以有繼承關係
多型
多型的定義:某一類事物的多種存在形態
例如: 動物中貓, 狗
貓這個物件對應的型別是貓的型別 貓 想= new 貓();
同時貓也是動物的一種,也可以把貓稱為動物 動物 y = new 貓(); 父型別引用指向了子類物件
動物是貓和狗具體事物中抽取出來的父型別
多型的體現
父類引用指向了自己的子類物件
父類的引用也可以接受自己的子類物件
多型的前提
必須是類與類之間有關係.要麼繼承,要麼實現
通常還有一個前提:存在覆蓋
多型的好處
多型的出現大大的提高了程式的擴充套件性
多型的弊端
提高了擴充套件性,但是隻能使用父類應用訪問父類中的成員
練習:基礎班學生:::學習, 睡覺
高階班學生:::學習, 睡覺
在多型中成員函式的特點
在編譯時期:參閱引用型變數所屬的類中是否有呼叫方法.如果有,編譯通過,如果沒有,編譯失敗
在執行時期:參閱物件所屬的類中是否有呼叫的方法
簡單總結就是:成員函式在多型呼叫時,編譯看左邊,執行看右邊
在多型中,成員變數的特點:
無論編譯還是執行,都參考左邊(引用型變數所屬的類)
在多型中,靜態成員函式的特點
無論編譯還是執行,都參考左邊
多型主機板示例: