聊聊繼承、多態(tài)和抽象

想了很久,簡書的第一篇文章寫些什么好,自己是個(gè)技術(shù)小白,講不了什么高深的技術(shù),那就來聊聊我所認(rèn)知的一些JAVA技術(shù)知識。

繼承


Java是面向?qū)ο蟪绦蛟O(shè)計(jì)語言。(什么是面向?qū)ο螅谶@里就不嘮叨了),而Java程序是什么?就是通過繼承、組合對象形成的一套問題解決方案。通過繼承可以縱觀JAVA語言的所有特性。
繼承是面向?qū)ο缶幊碳夹g(shù)的基石(將復(fù)雜問題簡單化)。也是后面所要講的多態(tài)和抽象的前提。通俗來講,繼承是一個(gè)對象從另一個(gè)對象獲取屬性的過程(除了private屬性以外),類之間就形成了所謂的等級關(guān)系。
繼承有以下幾個(gè)特點(diǎn):

  • 單一繼承(解決了誰是“母親”的問題)
  • IS-A問題(解決了繼承和組合的問題)
  • Java所有類都隱式繼承Object基類;
  • extends 與 Implement關(guān)鍵詞

多態(tài)


什么是多態(tài)?同一種行為具有不同表現(xiàn)形態(tài)或者形式的能力這是官方的解釋,聽起來一頭霧水。我的理解是:多態(tài)是對象的多種表現(xiàn)形式,即向上轉(zhuǎn)型。
多態(tài)的前提是:

  • 繼承
  • 動(dòng)態(tài)綁定

有人問什么是動(dòng)態(tài)綁定,《Java編程思想》給出這樣的解釋:

在在運(yùn)行時(shí)根據(jù)對象的類型進(jìn)行綁定,而與之相反的是前期綁定,編譯時(shí)就確定類型。>

有人又問,Java不是動(dòng)態(tài)編程語言,怎么實(shí)現(xiàn)動(dòng)態(tài)綁定呢?這是Java語言的一個(gè)特點(diǎn)——反射機(jī)制(后續(xù)更新文章會講述)

看栗子:

public class Animal{
    public Animal(){
    }
    public void move(){
        System.out.println("Animal move");
    }
}

public class Dog extends Animal{
      public String name;
      public Dog(String name){
            this.name=name;
      }
      public void move(){
           System.out.println(name+"move");
      }
      public void eat(){
            System.out.println(name+"eat");
      }
}
public class Test{
    public static void main(String[] args){
          Animal dog1=new Dog("dog1");
          dog1.move();
          //dog1.eat();錯(cuò)誤
          Dog dog2=new Dog("dog2");
          dog2.move();
          dog2.eat();
    }
}

執(zhí)行以上程序,輸出結(jié)果為:
dog1.move;
dog2.move;
dog2.eat;

  • 為什么Animal對象 dog1 輸出的是dog1.move,而不是Animal.move,這是因?yàn)镴AVA語言在運(yùn)行的時(shí)候才確定dog1所指向的對象是Dog,Dog向上轉(zhuǎn)型為Animal

  • dog1引用依舊是Animal,Animal是沒有eat()方法的,所以dog1.eat()無法調(diào)用。記得前面繼承所講的么,dog1 IS-A Animal,但Animal is not a Dog。

抽象


抽象類,我的理解是,無法創(chuàng)建具體對象的類是抽象類,抽象類只是一個(gè)特殊的類,既然是JAVA中的類,那么就具有其所有的特點(diǎn):繼承、多態(tài)、重寫重載等;

作用:

  • 邏輯接口與實(shí)現(xiàn)分離,結(jié)構(gòu)化;
  • 完全解耦,向上轉(zhuǎn)型;

應(yīng)用:

  • 適配器設(shè)計(jì)模式;
  • 工廠設(shè)計(jì)模式;

特點(diǎn):

  • 包含著abstract 方法的類都是抽象類,抽象類用abstract 來修飾
  • 因?yàn)槌橄箢惒荒軐?shí)例化,所以必須被繼承;
  • 接口是極度抽象化的類;
  • 任何子類必須重寫父類的抽象方法;
    詳情:
  • 詳情請看《Java編程思想》
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 一.成員變量與局部變量的區(qū)別 成員變量:在類中定義,用來描述對象將要有什么(屬性)??杀槐绢惙椒ê推渌?dāng)前類有關(guān)...
    jeffierw閱讀 632評論 0 0
  • 面向?qū)ο笾饕槍γ嫦蜻^程。 面向過程的基本單元是函數(shù)。 什么是對象:EVERYTHING IS OBJECT(萬物...
    sinpi閱讀 1,220評論 0 4
  • 你很清楚的知道什么時(shí)候用抽象類,什么時(shí)候用接口么?p.s. 多文字預(yù)警! 1 抽象類和接口簡介 1.1 抽象類 ...
    Sharember閱讀 2,429評論 9 55
  • 2013年的大年初一,我第一次去甘肅,從飛機(jī)的窗口看下去,是滿眼萬仞溝壑的黃土地,作為南方人,第一眼著實(shí)嚇了我一跳...
    Alice_cyy閱讀 276評論 0 0
  • 富蘭克林認(rèn)為一個(gè)人必須具有的美德: 1.節(jié)制。食不過飽,飲不過量。 2.寡言。言必益于人或益于己;避免無益的閑聊。...
    一1一1一1一1一閱讀 1,549評論 0 1

友情鏈接更多精彩內(nèi)容