如何通过父类类型引用访问子类特有的成员变量?
访问父类引用中子类特有的成员变量
先看你的代码场景:
private class A{} private class B extends A{int x = 5;} // 父类类型引用指向子类实例 A instB = new B();
要访问B类特有的x变量,核心是向下强制类型转换——因为编译器只知道instB是A类型,不知道它实际是B的实例,必须告诉编译器它的真实类型,才能访问子类特有的成员。
直接转换访问
可以直接把引用强制转为B类型后访问:
// 单次访问的简洁写法 System.out.println(((B) instB).x); // 多次使用的话,先转为B类型变量更方便 B bObj = (B) instB; bObj.x = 10; // 实际场景中修改可变的x System.out.println(bObj.x);
安全转换(避免异常)
如果不确定instB是否真的是B的实例,建议先做类型检查,防止抛出ClassCastException:
if (instB instanceof B) { B bObj = (B) instB; bObj.x = 15; System.out.println(bObj.x); }
本质逻辑:父类引用只能识别父类定义或继承的成员,子类独有的成员必须通过向下转型,让编译器识别到实例的真实子类类型后才能访问。
内容的提问来源于stack exchange,提问作者BlockManBlue
相关产品推荐
相关产品推荐

