有关向上转型的方法调用疑问

来源: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回答

好帮手慕阿满

2019-07-17

    同学你好,同学理解的不错。一个Java类实例向上转型为父类对象后,这个对象调用的toString()方法是子类重写的toString方法。向上转型后无法调用子类独有的方法,同学理解的很好。在反射的测试中,输出的p是person类的实例,同学是有什么问题吗?可以具体提出来。

如果我的回答解决了你的疑惑,请采纳。祝:学习愉快~

0

0 学习 · 8016 问题

查看课程