为了模拟一些自动生成的类,我创建了一个小的jUnit测试类来模拟继承和隐藏字段。
public class ClassDerivationTest {
@Test
public void testChild() {
ChildClass child = new ChildClass();
// Implicit boolean as it is hiding the super value
child.value = true;
// one way to update the parent value
// child.setParentVal("true");
// child.super.value = "test";
}
public class ChildClass extends ParentClass {
public boolean value;
}
public class ParentClass {
public String name;
public String value;
}
}
我的问题是:是否有任何简短的方法以类似的方式分配超类value
字段:
child.super.value = "test";
而不是在ChildClass中创建特定的setter:
// Imagine this method is not existing for the question
public void setParentVal(String val) {
super.value = val;
}
我正在使用Java 7,我想知道是否可以在不修改ChildClass
和ParentClass
的情况下(就像它可能是自动生成的代码一样)。
更新:
我知道你有几种方法可以解决这个问题
a)根据Jon的答案进行施法:((ParentClass) child).value = "test";
但不是很好
b)像这样(尽可能)实现超类:ParentClass myInstance = new ChildClass();
代码myInstance.value
将引用ParentClass
但我想更专注于Java 8的新功能。 例如,是否可以使用lambda或Java 8的另一个新功能解决此问题?
答案 0 :(得分:7)
嗯,你可以强制child
使编译器解析value
而不是ParentClass
的字段ChildClass
:
((ParentClass) child).value = "test";
但坦率地说,我会避免非私人领域; b)避免故意给出具有相同名称的超类和子类字段。
与您的评论相反,子类字段不会覆盖"超类字段 - 它隐藏它。