有关向上转型的方法调用疑问
来源:3-5 Field类的概述和使用
哆丶哆
2019-07-17 03:04:45
老师,在学习java中,我知道,如果输出对象变量名,默认调用了它的tostring方法
那如果一个java类实例对象向上转型为它的父类对象,那这个对象调用的tostring方法是不是就是调用子类所重写的tostring方法呢?而且我记得向上转型之后的对象无法再调用子类中独有的方法了,是这样么?
如下例的反射测试代码中,Field类的对象field反射的是Person类的私有属性sex,而在最后两行输出语句中,是可以正常输出p这个实例对象里面的值的,我看了Person类的结构,它是重写了tostring方法的,这里调用的是Person类的tostring方法
@Test // 测试私有的属性 public void demo2() throws Exception{ // 获得Class Class class1 = Class.forName("com.imooc.reflect.test.Person"); // 获得私有的属性 Field field = class1.getDeclaredField("sex"); // 操作属性: Person p = (Person) class1.newInstance(); // 私有属性,需要设置一个可访问的权限: field.setAccessible(true); field.set(p, "男"); // 获取值: Object obj = field.get(p); System.out.println(obj); System.out.println(p); }
1回答
同学你好,同学理解的不错。一个Java类实例向上转型为父类对象后,这个对象调用的toString()方法是子类重写的toString方法。向上转型后无法调用子类独有的方法,同学理解的很好。在反射的测试中,输出的p是person类的实例,同学是有什么问题吗?可以具体提出来。
如果我的回答解决了你的疑惑,请采纳。祝:学习愉快~
相似问题