最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java Method類及invoke方法原理解析

 更新時間:2020年08月01日 08:36:04   作者:小尾學長  
這篇文章主要介紹了Java Method類及invoke方法原理解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下

在說Method和invoke的使用之前我們來看一個小例子, 如果看懂了那就ok了

public class MethodInvoke {
 
 class Animal {
  public void print() {
   System.out.println("Animal.print()");
  }
 }

 class Cat extends Animal {

  @Override
  public void print() {
   System.out.println("Cat.print()");
  }
 }
 
	public static void main(String[] args) throws Exception {
		Method animalMethod = Animal.class.getDeclaredMethod("print");
		Method catMethod = Cat.class.getDeclaredMethod("print");
		
		Animal animal = new Animal();
		Cat cat = new Cat();
		animalMethod.invoke(cat); //相當于 cat調(diào)用父類的print方法
		animalMethod.invoke(animal);//相當于 animal.print();
		
		catMethod.invoke(cat); //相當于 cat.print();
		catMethod.invoke(animal);
	}
	
}

執(zhí)行結(jié)果如下

Cat.print()
Animal.print()
Cat.print()
Exception in thread "main" java.lang.IllegalArgumentException: object is not an instance of declaring class
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)

代碼中,Cat類覆蓋了父類Animal的print()方法, 然后通過反射分別獲取print()的Method對象。最后分別用Cat和Animal的實例對象去執(zhí)行print()方法。其中animalMethod.invoke(animal)和catMethod.invoke(cat),示例對象的真實類型和Method的聲明Classs是相同的,按照預期打印結(jié)果;animalMethod.invoke(cat)中,由于Cat是Animal的子類,按照多態(tài)的特性,子類調(diào)用父類的的方法,方法執(zhí)行時會動態(tài)鏈接到子類的實現(xiàn)方法上。

因此,這里會調(diào)用Cat.print()方法;而catMethod.invoke(animal)中,傳入的參數(shù)類型Animal是父類,卻期望調(diào)用子類Cat的方法,因此這一次會拋出異常。

以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

最新評論

上饶市| 乌兰县| 长武县| 安达市| 唐山市| 南和县| 文安县| 万山特区| 陇川县| 平远县| 杭锦旗| 莎车县| 石渠县| 中阳县| 夏邑县| 敦煌市| 东乌珠穆沁旗| 珲春市| 永靖县| 南投市| 信丰县| 雷波县| 永福县| 灵山县| 靖江市| 杭州市| 抚顺县| 丹凤县| 阳江市| 利津县| 平阳县| 柏乡县| 芒康县| 通山县| 宿州市| 廊坊市| 那曲县| 南通市| 山阳县| 胶州市| 日土县|