面向對象編程(中)

面向對象編程(中)

繼承性(inheritance)

​ 多個類中存在相同屬性和行爲時,將這些內容抽取到單獨一個類 中, 那麼多個類無需再定義這些屬性和行爲,只要繼承那個類便可java

多個類稱爲子類(派生類),單獨的這個類稱爲父類(基類或超類)編程

做用:app

  • 繼承的出現減小了代碼冗餘,提升了代碼的複用性
  • 繼承的出現,更有利於功能的擴展
  • 繼承的出現讓類與類之間產生了關係,提供了多態的前提

類繼承語法規則:ide

class 子類名 extends 父類名{ }

重寫 (override/overwrite)

​ 在子類中能夠根據須要對從父類中繼承來的方法進行改造,也稱爲方法的重置、覆蓋。在程序執行時,子類的方法將覆蓋父類的方法測試

要求:this

  • 子類重寫的方法必須和父類被重寫的方法具備相同的方法名稱、參數列表code

  • 子類重寫的方法的返回值類型不能大於父類被重寫的方法的返回值類型orm

  • 子類重寫的方法使用的訪問權限不能小於父類被重寫的方法的訪問權限對象

    • 子類不能重寫父類中聲明爲private權限的方法
  • 子類方法拋出的異常不能大於父類被重寫方法的異常blog

子類與父類中同名同參數的方法必須同時聲明爲非static的(即爲重寫),或者同時聲明爲 static的(不是重寫)。由於static方法是屬於類的,子類沒法覆蓋父類的方法

關鍵字:super

  • super可用於訪問父類中定義的屬性
  • super可用於調用父類中定義的成員方法
  • super可用於在子類構造器中調用父類的構造器

當子父類出現同名成員時,能夠用super代表調用的是父類中的成員
super的追溯不只限於直接父類
this表明本類對象的引用,super表明父類的內存空間的標識
當父類中沒有空參數的構造器時,子類的構造器必須經過this(參數列表)或者super(參數列表)語句指定調用本類或者父類中相應的構造器。同時,只能」二選一」 ,且必須放在構造器的首行

this和super的區別

多態性

  • 對象的多態性:父類的引用指向子類的對象

  • Java引用變量有兩個類型:編譯時類型和運行時類型

    • 編譯時類型由聲明 該變量時使用的類型決定
    • 運行時類型由實際賦給該變量的對象決定
  • 編譯時,看左邊;運行時,看右邊

    • 「看左邊」 :看的是父類的引用(父類中不具有子類特有的方法)
    • 「看右邊」 :看的是子類的對象(實際運行的是子類重寫父類的方法)

虛擬方法調用(Virtual Method Invocation)

子類中定義了與父類同名同參數的方法,在多態狀況下,將此時父類的方法稱爲虛擬方法,父類根據賦給它的不一樣子類對象,動態調用屬於子類的該方法。這樣的方法調用在編譯期是沒法肯定的

Person e = new Student();
e.getInfo(); //調用Student類的getInfo()方法

操做符:instanceof

x instanceof A:檢驗x是否爲類A的對象,返回值爲boolean

對象類型轉換 (Casting )

  1. 自動類型轉換:小的數據類型能夠自動轉換成大的數據類型
  2. 強制類型轉換:能夠把大的數據類型強制轉換(casting)成小的數據類型
int a=(int)1200L;

對Java對象的強制類型轉換稱爲造型

  • 從子類到父類的類型轉換能夠自動進行
  • 從父類到子類的類型轉換必須經過造型(強制類型轉換)實現
  • 無繼承關係的引用類型間的轉換是非法的
  • 在造型前可使用instanceof操做符測試一個對象的類型

Object類

  • Object類是全部Java類的根父類

  • 若是在類的聲明中未使用extends關鍵字指明其父類,則默認父類爲java.lang.Object類

    method(Object obj){…} //能夠接收任何類做爲其參數

==操做符與equals方法

==:

  • 基本類型比較值:只要兩個變量的值相等,即爲true
  • 引用類型比較引用(是否指向同一個對象):只有指向同一個對象時,==才返回true

用「==」進行比較時,符號兩邊的數據類型必須兼容(可自動轉換的基本數據類型除外),不然編譯出錯

equals():能夠重寫

  • 只能比較引用類型,其做用與「==」相同,比較是否指向同一個對象
  • 格式:obj1.equals(obj2)
  • 當用equals()方法進行比較時,對類File、String、Date及包裝類 (Wrapper Class)來講,是比較類型及內容而不考慮引用的是不是同一個對象

緣由:在這些類中重寫了Object類的equals()方法
任何狀況下,x.equals(null),永遠返回是「false」

toString()

  • toString()方法在Object類中定義,其返回值是String類型,返回類名和它的引用地址
  • 在進行String與其它類型數據的鏈接操做時,自動調用toString()方法
  • 基本類型數據轉換爲String類型時,調用了對應包裝類的toString()方法

包裝類

針對八種基本數據類型定義相應的引用類型—包裝類(封裝類)
JDK1.5以後,支持自動裝箱,自動拆箱。但類型必須匹配

包裝類(Wrapper)

基本數據類型包裝成包裝類的實例 ---裝箱

int i = 500; 
Integer t = new Integer(i);
Long l = new Long(「asdf」); //NumberFormatException

得到包裝類對象中包裝的基本類型變量 ---拆箱

//調用包裝類的.xxxValue()方法:
boolean b = bObj.booleanValue();

字符串轉換成基本數據類型

//經過包裝類的構造器實現:
int i = new Integer(「12」);
// 經過包裝類的parseXxx(String s)靜態方法:
Float f = Float.parseFloat(「12.1」);

基本數據類型轉換成字符串

//調用字符串重載的valueOf()方法:
String fstr = String.valueOf(2.34f);
// 更直接的方式:
String intStr = 5 + 「」;
相關文章
相關標籤/搜索