1. 程式人生 > >java 父類及子類間轉換

java 父類及子類間轉換

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  ( :