Java方法类及调用方法的用法

  介绍

这篇文章主要讲解了Java方法类及调用方法的用法,内容清晰明了,对此有兴趣的小伙伴可以学习一下,相信大家阅读完之后会有帮助。

在说方法和调用的使用之前我们来看一个小例子,如果看懂了那就好了

公共类MethodInvoke {
  
  类动物{
  公共空间print () {
  System.out.println (“Animal.print ()“);
  }
  }
  
  猫类动物{延伸
  
  @Override
  公共空间print () {
  System.out.println (“Cat.print ()“);
  }
  }
  
  公共静态void main (String [] args){抛出异常
  方法animalMethod=Animal.class.getDeclaredMethod(“保险单上);
  方法catMethod=Cat.class.getDeclaredMethod(“保险单上);
  
  动物动物=new ();
  猫猫猫=new ();
  animalMethod.invoke(猫);//相当于猫调用父类的印刷方法
  animalMethod.invoke(动物);//相当于animal.print ();
  
  catMethod.invoke(猫);//相当于cat.print ();
  catMethod.invoke(动物);
  }
  
  }

执行结果如下

Cat.print ()   Animal.print ()   Cat.print ()   异常的线程“main". lang。IllegalArgumentException:对象不是声明类的一个实例   在sun.reflect.NativeMethodAccessorImpl。invoke0(本地方法)   在sun.reflect.NativeMethodAccessorImpl。调用(未知源)   在sun.reflect.DelegatingMethodAccessorImpl。调用(未知源)

代码中,猫类覆盖了父类动物的print()方法,然后通过反射分别获取打印()的方法对象。最后分别用猫和动物的实例对象去执行打印()方法。其中animalMethod.invoke(动物)和catMethod.invoke(猫),示例对象的真实类型和方法的声明、是相同的,按照预期打印结果;animalMethod.invoke (Cat)中,由于猫是动物的子类,按照多态的特性,子类调用父类的的方法,方法执行时会动态链接到子类的实现方法上。

因此,这里会调用Cat.print()方法;而catMethod.invoke(动物)中,传入的参数类型动物是父类,却期望调用子猫类的方法,因此这一次会抛出异常。

Java方法类及调用方法的用法