av一区二区在线观看_亚洲男人的天堂网站_日韩亚洲视频_在线成人免费_欧美日韩精品免费观看视频_久草视

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

Java Method類及invoke方法原理解析

瀏覽:11日期: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
相關文章:
主站蜘蛛池模板: 国产高清一区二区 | 亚洲成人久久久 | 色综合欧美 | 精品一区在线免费观看 | 久久久久久免费毛片精品 | 激情五月婷婷丁香 | 色综合九九 | 欧美一级免费看 | 成人亚洲精品 | 免费欧美| 91九色在线观看 | 美女在线国产 | 国产乱码精品一区二区三区中文 | 在线黄av| 亚洲视频在线观看免费 | 夜夜操操操 | 九九在线视频 | 91玖玖| 中文成人在线 | 日韩免费高清视频 | av中文在线| 国内精品久久久久 | 奇米av | 天堂素人约啪 | 国产999在线观看 | 成人亚洲网站 | 日韩精品在线免费观看 | 99久9| 日韩三级在线观看 | 日韩精品欧美精品 | 亚洲一区中文字幕在线观看 | 久久精品—区二区三区 | 一区二区三区亚洲精品国 | 国产一级黄色网 | 亚洲精品无 | 国产羞羞视频在线观看 | 国产综合久久 | 一区二区视频在线观看 | 国产黄色小视频 | 国产日韩欧美在线 | 久久国品片 |