1. 程式人生 > 程式設計 >JAVA 多型操作----父類與子類轉換問題例項分析

JAVA 多型操作----父類與子類轉換問題例項分析

本文例項講述了JAVA 多型操作----父類與子類轉換問題。分享給大家供大家參考,具體如下:

JAVA語言中,物件變數是多型的

每個子類物件都算是父類物件(子類物件可以當作父類變數所引用)

那反過來可不可以呢?

答案是取決於父類變數引用的是誰

如果父類變數引用的是子類物件的例項,可以通過強轉被子類變數引用

如果父類變數引用的是父類物件的例項,則不能被為子類變數引用

上程式碼舉例子(本篇一直用這兩個類舉例子,main測試不同):

一個Father類

package test;
 
public class Father 
{
	int fatherA;
	Father(int a)
	{
		fatherA=a;
	}
}

一個Son類

package test;
 
public class Son extends Father 
{
	int sonB;
	Son(int a,int b)
	{
		super(a);
		sonB=b;
	}
	
}

把子類物件賦給父類變數:

package test;
 
public class MainTest 
{
 
	public static void main(String[] args) 
	{
		Son son1=new Son(1,2);
		Father father1=son1;	//子類物件被父類變數引用
		System.out.println(father1.fatherA);
	}
 
}

結果: 賦值成功!JAVA 多型操作----父類與子類轉換問題例項分析

把父類引用賦值給子類變數分兩種情況:

1.父類引用的是子類物件:

package test;
 
public class MainTest 
{
 
	public static void main(String[] args) 
	{
		Father father2=new Son(1,2);	//父類引用了子類物件的例項
		Son son2=(Son)father2;
		System.out.println(son2.sonB);
	}
 
}

結果:轉換成功!

JAVA 多型操作----父類與子類轉換問題例項分析

這裡注意即使引用的是子類例項轉換成子類也需要強轉,否則會報錯

2.父類引用的是父類的例項:

package test;
 
public class MainTest 
{
 
	public static void main(String[] args) 
	{
		Father father2=new Father(1);	//父類引用了子類物件的例項
		Son son2=(Son)father2;
		System.out.println(son2.sonB);
	}
 
}

結果:失敗!

JAVA 多型操作----父類與子類轉換問題例項分析

結論:

  • 子類物件可以當作父類物件使用(子類的引用可以賦值給父類變數),
  • 父類的引用如果是:
  1. 子類的例項,可以通過強轉賦值給子類引用
  2. 父類的例項,不能被子類引用

其實細想new出的物件之間本身是不能轉換的,我們賦值的是類的引用,

總的來說就是父類變數可以應用父類例項,也可以引用子類例項,

子類變數只能引用子類例項

這也就是開篇所說的 : 子類物件算是父類物件

更多關於java相關內容感興趣的讀者可檢視本站專題:《Java面向物件程式設計入門與進階教程》、《Java資料結構與演算法教程》、《Java操作DOM節點技巧總結》、《Java檔案與目錄操作技巧彙總》和《Java快取操作技巧彙總》

希望本文所述對大家java程式設計有所幫助。