1.向上轉型
將父類的對象轉為子類對象。自動轉換。
通過其子類進行父類的執行個體化操作,則如果調用的方法被子類覆寫過。
則肯定是調用被覆寫過的方法。
注意點:
轉型後在子類中是無法找到在子類中定義的新方法的。
2.向下轉型
將父類的對象轉為子類對象。需要強制轉換。
在進行對象向下轉型的時候。有一個注意點。
如果兩個沒有關係的對象之間發生了轉換了關係,則肯定出現此異常。
注意 :要想產生對象的向下轉型。則肯定是要先產生一個向上轉型。
3.對象的多態性的應用
4.instanceof 關鍵字
class A{ // 定義類Apublic void fun1(){ // 定義fun1()方法System.out.println("A --> public void fun1(){}") ;}public void fun2(){ this.fun1() ; // 調用fun1()方法}};class B extends A{public void fun1(){ // 此方法被子類覆寫了System.out.println("B --> public void fun1(){}") ;}public void fun3(){System.out.println("B --> public void fun3(){}") ;}};class C extends A{public void fun1(){ // 此方法被子類覆寫了System.out.println("C --> public void fun1(){}") ;}public void fun5(){System.out.println("C --> public void fun5(){}") ;}};public class InstanceofDemo02{public static void main(String asrgs[]){fun(new B()) ;fun(new C()) ;}public static void fun(A a){a.fun1() ;if(a instanceof B){B b = (B) a ;b.fun3() ;}if(a instanceof C){ C c = (C) a ; c.fun5() ;}}};
在java 中可以使用instanceof 關鍵字來判斷一個對象到底是那個類的執行個體。
在開發中一定要注意,對於向下轉型的操作最好增加instanceof驗證。
以保證轉型時候不會發生ClassCastException
要增加新的子類,肯定要修改fun 方法,這樣一來就失去了靈活性。所以
在程式的開發中重點在父類中。只要父類設計足夠合理。則開發肯定會非常的方便。
在開發中一定要記住以下一點:
一個類永遠不要去繼承一個實現好的類。而只能去繼承一個抽象類別或介面。
5.Object 類
如果一個類在沒有定義的時候沒有指定繼承的是那個類。則就是預設是繼承Object類。
對象在列印的時候是會預設去調去toString()方法的。
6.封裝類
一切皆是對象。八大資料類型不是對象。
所以將八大資料類型封裝成封裝類。
如
基礎資料型別 (Elementary Data Type) 封裝類
int ------------------------>Integer,
char ------------------------>Character,
short------------------------>Short,
double ---------------------->Double,
long ------------------------>Long,
float ----------------------->Float.
boolean --------------------->Boolean,
byte ------------------------>Byte.
此八大封裝類所繼承的父類不一定相同。
裝箱和拆箱
裝箱:將基礎資料型別 (Elementary Data Type)變成封裝類。
int x = 30 ;
Integer f = new Integer(x); //裝箱
拆箱:將封裝類變成基礎資料型別 (Elementary Data Type)。
y = f.intValue(); //拆箱
在JDK1.5 後有了自動的去裝箱的自動的拆箱功能。
7.匿名內部類
interface A{public void printInfo() ; // }class X {public void fun1(){this.fun2(new A(){public void printInfo(){System.out.println("Hello World!!!") ;}}) ;}public void fun2(A a){a.printInfo() ;}};public class NoInnerClassDemo02{public static void main(String args[]){new X().fun1() ; // 執行個體化X類的對象,並調用fun1()方法}};其中的new A()只使用了一個,故可以去使用匿名內部類。
- 其中的new A()只使用了一個,故可以去使用匿名內部類。