程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> JAVA綜合教程 >> 引用和對象實例的區別,引用對象實例區別

引用和對象實例的區別,引用對象實例區別

編輯:JAVA綜合教程

引用和對象實例的區別,引用對象實例區別


父類:

package test;

public class FatherClass {

	protected int i=0;
}

  子類:

package test;

import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;

public class Child extends FatherClass {

	public int i1=1;
	public void function(){
		System.out.println("call Child1 function");
	}
	public static void main(String []args) throws NoSuchMethodException, SecurityException, IllegalAccessException, IllegalArgumentException, InvocationTargetException{
		//開始執行main
		System.out.println("the entrance.");
		System.out.println("----------------");
		//父類引用指向子類對象實例
		FatherClass f;
		f=new Child();		
		//f.function();//不符合語法規則,編譯不通過
		System.out.println(f);
		System.out.println(f.getClass());
		System.out.println("----------------");
		//子類引用指向子類對象實例
		Child c1;
		c1=(Child) f;
		
		c1.function();
		System.out.println(c1);
		System.out.println(c1.getClass());
		
		//運行時通過Method調用方法
		Method m=Child.class.getMethod("function");
		m.invoke(f);//輸出正常
		
		//子類引用指向了父類實例,父類中並沒有void function()
		//編譯正確但是運行錯誤
		Child c2=(Child) new FatherClass();
		m.invoke(c2);//Exception
		/**
		 * Exception in thread "main" java.lang.ClassCastException: 
		 * test.FatherClass cannot be cast to test.Child1
	at test.Child1.main(Child1.java:36)
		 */
	}
}

  

輸出:

the entrance.
----------------
test.Child@2a139a55
class test.Child
----------------
call Child1 function
test.Child@2a139a55
class test.Child
call Child1 function
Exception in thread "main" java.lang.ClassCastException: test.FatherClass cannot be cast to test.Child
at test.Child.main(Child.java:37)

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved