Java关于由子类构造器生成的父类对象的反射问题

Java关于由子类构造器生成的父类对象的反射问题

  • 问题概括
  • 一、案例准备
  • 二、问题描述


问题概括

提示:这里我就不绕圈子直接描述:

Java中由子类构造器生成的父类的getclass.getName不是父类的类名而是子类的类名,因此不可以用子类构造器生成的父类对象获取Class类进行反射操作,而是直接用父类名


一、案例准备

1.准备了一个父类CouF
Java关于由子类构造器生成的父类对象的反射问题_第1张图片

2.准备了一个继承父类CouF的子类Cou
Java关于由子类构造器生成的父类对象的反射问题_第2张图片



二、问题描述

在测试类中新建一个由子类(Cou)构造器生成的父类对象couf,并调用getClass方法获取Class类再调用getName方法获取该对象的类名

Java关于由子类构造器生成的父类对象的反射问题_第3张图片

而getName()返回的结果为Cou,说明该父类对象的类名为Cou而不是CouF
Java关于由子类构造器生成的父类对象的反射问题_第4张图片

因此一定不能用对象.getClass.getDeclareMethod()获取对象的方法,否则会报错如下图所示

Java关于由子类构造器生成的父类对象的反射问题_第5张图片

正确方法应该用父类的类名如下图所示

Java关于由子类构造器生成的父类对象的反射问题_第6张图片

你可能感兴趣的:(Java基础,java,开发语言)