java 父類及子類間轉換
阿新 • • 發佈:2018-11-12
1.子類轉父類,無需強轉,只能呼叫父類與子類中同時擁有的變數:
class MyBase{
int a=5;
}
public class zhuan1 extends MyBase{
int a=3;
int b=8;
public static void main(String[] args) {
MyBase bs=new zhuan1();
System.out.println(bs.a);//輸出父類變數a的值:5
System.out.println(bs.b);//編譯器報錯,找不到
}
}
當父類中定義某方法,子類中未定義時,預設執行父類的方法,如果子類中定義同名同參數的方法,即為對父類的覆蓋,最終執行父類的方法:
class MyBase{ int a=5; public void print() { System.out.println("I am Base!"); } } public class zhuan1 extends MyBase{ int a=3; int b=8; public void print() { System.out.println("I am zhuan1!"); } public static void main(String[] args) { MyBase bs=new zhuan1(); System.out.println(bs.a); //System.out.println(bs.b); 報錯,找不到b bs.print(); } }
輸出結果如下:
2.父類轉子類,需要強轉,並且轉換能否成功取決於被轉換的物件是否真的是目標型別的一員:
class TBase{
int c=5;
}
public class zhuan extends TBase{
int a=10;
public static void main(String[] args) {
zhuan z=(zhuan)new TBase();
System.out.println(z.a);
System.out.println(z.c);
}
}
執行後如下:轉換失敗,因為被轉換的物件本質上是TBase類物件,並不是zhuan類物件
class TBase{
int c=5;
}
public class zhuan extends TBase{
int a=10;
public static void main(String[] args) {
TBase z = new zhuan();
zhuan zz=(zhuan)z;
System.out.println(zz.a);
System.out.println(zz.c);
}
}
執行結果如下:轉換成功,被轉換物件原本是zhuan類物件,先被轉為Tbase類,後被轉為zhuan類,so,可以被case ( :