久久福利_99r_国产日韩在线视频_直接看av的网站_中文欧美日韩_久久一

您的位置:首頁技術文章
文章詳情頁

Java Method類及invoke方法原理解析

瀏覽:17日期:2022-08-27 16:38:56

在說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調用父類的print方法animalMethod.invoke(animal);//相當于 animal.print();catMethod.invoke(cat); //相當于 cat.print();catMethod.invoke(animal);}}

執行結果如下

Cat.print()Animal.print()Cat.print()Exception in thread 'main' java.lang.IllegalArgumentException: object is not an instance of declaring classat 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的實例對象去執行print()方法。其中animalMethod.invoke(animal)和catMethod.invoke(cat),示例對象的真實類型和Method的聲明Classs是相同的,按照預期打印結果;animalMethod.invoke(cat)中,由于Cat是Animal的子類,按照多態的特性,子類調用父類的的方法,方法執行時會動態鏈接到子類的實現方法上。

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

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持好吧啦網。

標簽: Java
相關文章:
主站蜘蛛池模板: 日韩三级视频 | 中文字幕一区二区三区日韩精品 | 成人涩涩网站 | 国产精品久久久久久久久免费桃花 | 四虎网址 | 国产精品18久久久久久首页狼 | 91在线电影| 午夜影视免费观看 | 黄色小视频在线观看 | 玖玖综合网 | 日韩精品一区二区在线观看 | 国产精品极品美女在线观看免费 | 国产成人在线一区二区 | 精品国产91久久久久久久 | 一级毛片免费看 | 久久国产精品免费一区二区三区 | 日韩在线免费观看视频 | 久久精品美女 | 亚洲毛片在线 | 中文字幕一区二区在线观看 | 天天影视色香欲 | 国产精品日韩欧美 | 成人免费黄色毛片 | 色黄网站| 成人午夜影院 | 日韩一区二区三区在线观看 | 91hd精品少妇 | 亚洲永久免费观看 | 成人免费一区二区三区视频网站 | 日韩精品免费在线观看 | 久久777 | 国产精品久久久久久久久久妞妞 | 欧美黄色a视频 | 亚洲一区二区三区福利 | 丁香六月av | 亚洲一区 日韩精品 中文字幕 | 欧美日韩成人在线观看 | 一级在线观看 | 五月婷婷狠狠爱 | 日韩欧美国产一区二区三区 | 精品欧美一区二区在线观看 |