5_面向對象-中java
子類繼承了父類的全部屬性和方法(包括private修飾的),但因爲封裝性,子類不能直接調用父類的private屬性或方法。面試
override/overwrite 重寫
子類重寫父類的方法,方法名稱和參數列表相同。
子類的重寫的方法權限修飾符不小於父類的被重寫的方法權限修飾符。
子類不能重寫父類中private修飾的方法。
父類被重寫的方法的返回值類型是A類型,則子類重寫的方法返回值類型是A類型或A的子類。
父類被重寫的方法的返回值類型是void,則子類重寫的方法返回值類型是void。
子類重寫的方法拋出的異常類型不大於父類的被重寫的方法拋出的異常類型。數組
繼承
父類有空參構造
若是父類沒有空參構造,則能夠在子類構造器中使用super關鍵字調用父類中的有參構造。
建立子類對象時會調用父類的構造器,但只會建立一個子類對象。ide
多態
若子類重寫了父類方法,就意味着子類裏定義的方法完全覆蓋了父類裏的同名方法,系統將不可能把父類裏的方法轉移到子類中,編譯看左邊,運行看右邊。
對於實例變量則不存在這樣的現象,即便子類裏定義了與父類徹底相同的實例變量,這個實例變量依然不可能覆蓋父類中定義的實例變量,編譯和運行都看左邊。
簡單來講,方法能夠被覆蓋,屬性不能夠被覆蓋。
多態不適用於屬性,屬性編譯和運行看左邊。
多態是運行時行爲,調方法編譯看左邊,運行看右邊。code
使用instanceof 關鍵字作向下轉型前的判斷,不然可能會拋ClassCastException。
instanceof 左邊必須是對象實例或者null類型,不然沒法經過編譯。
instanceof 右邊必須是左邊對象的可轉換類型(可強轉),不然沒法經過編譯。orm
==:對於引用數據來講,比較的是地址值是否相同。對象
equals()方法
String、Date、File、包裝類都重寫了Object類中的equals()方法,比較的不是兩個對象的引用地址是否相同,而是比較的兩個對象的「實體內容」(屬性)是否相同。
x.equals(null) 返回的是false,null.equals(x) 會拋NullPointException繼承
基本數據類型、包裝類轉換成String類型 element
int num=10; String str= num +""; String str= String.valueOf(num); Double d1=new Double(12.3); String str= String.valueOf(d1);
String類型轉換成基本數據類型、包裝類it
String str="123"; int num = Integer.parseInt(str); //可能會拋NumberFormatException
面試題:
Object o1 = true ? new Integer(1) : new Double(2.0); //編譯的時候冒號兩邊的類型要一致,會有類型提高 System.out.println(o1); //1.0
@Test public void test3() { Integer i = new Integer(1); Integer j = new Integer(1); System.out.println(i == j);//false //Integer內部定義了IntegerCache結構,IntegerCache中定義了Integer[], //保存了從-128~127範圍的整數。若是咱們使用自動裝箱的方式,給Integer賦值的範圍在 //-128~127範圍內時,能夠直接使用數組中的元素,不用再去new了。目的:提升效率 Integer m = 1; Integer n = 1; System.out.println(m == n);//true Integer x = 128;//至關於new了一個Integer對象 Integer y = 128;//至關於new了一個Integer對象 System.out.println(x == y);//false }
Vector 向量類java.util.Vector能夠根據須要動態伸縮。 建立Vector對象:Vector v=new Vector(); 給向量添加元素:v.addElement(Object obj); //obj必須是對象 取出向量中的元素:Object obj=v.elementAt(0); //注意第一個元素的下標是0,返回值是Object類型的。 計算向量的長度:v.size();