回覆列表
  • 1 # 錢布斯

    1.抽象類不能直接例項化,並且對抽象類使用 new 運算子是編譯時錯誤。雖然一些變數和值在編譯時的型別可以是抽象的,但是這樣的變數和值必須或者為 null,或者含有對非抽象類的例項的引用(此非抽象類是從抽象類派生的)。

    2.抽象類往往用來表徵對問題領域進行分析、設計中得出的抽象概念,是對一系列看上去不同,但是本質上相同的具體概念的抽象。通常在程式設計語句中用 abstract 修飾的類是抽象類。在C++中,含有純虛擬函式的類稱為抽象類,它不能生成物件;在java中,含有抽象方法的類稱為抽象類,同樣不能生成物件。抽象類是不完整的,它只能用作基類。在面向物件方法中,抽象類主要用來進行型別隱藏和充當全域性變數的角色。只要把這些東西對應到生活中的概念就明白麵向物件的設計本身來源於生活,我們對事物的理解本身都是一樣的哲學,理解概念之後怎麼寫程式碼就更容易掌握。

    3.抽象類是表示部分地實現功能,比如把某些已經確定的功能實現了,而抽象的功能則表示未實現,因為不能確定子類用什麼方式實現它或者說把可能性和機會留給子類,比如對於寵物這個抽象類"睡覺“這個方法就是抽象的,因為子類的實現方法各有差異,狗經常待在牆邊陰涼處睡覺,而貓則爬到樹上睡覺,我們父類中不能把這個”個性“的東西放入”共性“的父類中,“共性”是它們都會睡覺,但具體怎麼睡覺則是”個性“,因此只能把它弄成抽象的,把機會留給子類來實現它。抽象類和抽象方法的目的是相同的。當子類實現這些抽象方法後就是叫”實現“,如果這個方法在父類中已經實現了不是抽象的而子類再來實現一次就是“覆蓋”或“重寫“了父類的方法,這2個都叫實現了”多型“特性。“多型”就是某個“共性”在各個子類中表現出不同的“個性”,但都同時保留著“共性”。

    例如:

    Pet[] pets = new Pet[] { new Dog(), new Cat()};

    for(int i = 0;i < pets.length; i++) {

    pets[i].doSleep(); // 這時每個個體的”個性“表現出現了,就是”多型“。程式是在用它們宣告的”共性“ doSleep 來呼叫這個方法的。這裡面就是用"實現”/”覆蓋“/"改寫”父類方法達到的。覆蓋了的方法在呼叫時會找對應的子類的方法而不是直接用父類提供的,在這裡貓會按貓的習慣睡覺,狗會按狗的習慣睡覺。

    }

  • 中秋節和大豐收的關聯?
  • 懷孕二十一週了,寶寶胎動比較頻繁,是怎麼回事呢?