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
相關文章:
主站蜘蛛池模板: 国产在线中文字幕 | 久久夜色精品国产 | 国产日韩电影 | 人人九九精 | 久久久这里都是精品 | 成人久久久 | 国产精品视频 | 欧美1区 | 国产精品视频一区二区三区四区国 | 国产精彩视频一区 | 日韩精品视频在线观看一区二区三区 | 91精品国产91久久久久久最新 | 国产电影精品久久 | 亚洲福利视频一区二区 | av在线免费观看网站 | 日韩影院一区 | 亚洲视频中文字幕 | 天天综合国产 | 欧美日韩三级视频 | 免费成人在线网站 | 黄色一级大片视频 | 欧美精品久久久 | 免费观看羞羞视频网站 | 久久精品小视频 | 国产成人叼嘿视频在线观看 | 亚洲欧美中文日韩在线v日本 | 99亚洲精品 | 99久久久久久久 | 色综合99 | www久久av| 日韩精品在线观看免费 | 国内精品视频在线观看 | 国产精品福利在线观看 | 国产精品一区二区无线 | 亚洲福利一区 | 亚洲专区在线 | 一区视频| 亚洲视频在线观看 | 久久久国产精品入口麻豆 | 国产精品久久久久久久久免费高清 | 91精品国产一区二区在线观看 |