1. 程式人生 > >黑馬程式設計師----Java基礎之面向物件(封裝 繼承 多型)(二)

黑馬程式設計師----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  貓();   父型別引用指向了子類物件

動物是貓和狗具體事物中抽取出來的父型別   

多型的體現

父類引用指向了自己的子類物件

父類的引用也可以接受自己的子類物件

多型的前提

必須是類與類之間有關係.要麼繼承,要麼實現

通常還有一個前提:存在覆蓋

多型的好處

多型的出現大大的提高了程式的擴充套件性

多型的弊端

提高了擴充套件性,但是隻能使用父類應用訪問父類中的成員

練習:基礎班學生:::學習,  睡覺

高階班學生:::學習,  睡覺


在多型中成員函式的特點

在編譯時期:參閱引用型變數所屬的類中是否有呼叫方法.如果有,編譯通過,如果沒有,編譯失敗

在執行時期:參閱物件所屬的類中是否有呼叫的方法

簡單總結就是:成員函式在多型呼叫時,編譯看左邊,執行看右邊

在多型中,成員變數的特點:

無論編譯還是執行,都參考左邊(引用型變數所屬的類)

在多型中,靜態成員函式的特點

無論編譯還是執行,都參考左邊

多型主機板示例: