这是一个普遍的问题。我找不到正确的答案,可能是因为我不知道在浏览器中写什么才能获得良好的结果:
如果我有一个A类
public abstract class Base {
String prop1;
int prop2;
}
我想创建两个扩展A的子类B和C:
public class B extends A {
String prop3;
}
public class C extends A {
String prop4;
}
主要班级
A b = new B();
A c = new C();
我的问题。如何修改属性prop3和prop4的值?
当我写b。时,智能感知仅显示用于自动完成的prop1和prop2,而由于出现错误,我无法编写例如b.prop3。我尝试使用(B)b这样的演员表。和我得到相同的结果。
答案 0 :(得分:1)
因为出现错误。我尝试使用(B)b这样的演员表。我得到了 结果相同。
它有助于读取错误。您会收到课程强制转换错误吗?属性不可见错误?和错别字相关的错误?
读取错误将完全告诉您。
现在,您将'a'和'b'声明为'A'类。为了访问“ B”和“ C”类的属性,您必须将变量强制转换为“ B”和“ C”,或者将它们声明为“ B”和“ C”。
此外,您没有声明getter / setter,并且变量默认为package-private。这意味着您不能从类外部访问变量。
例如,假设B确实有一个“ prop3”的吸气剂,则可以使用:
((B) b).getProp3();
为避免类强制转换警告,您可以执行以下操作:
if (b instanceof B)
{
((B) b).getProp3();
}
但是,只要需要执行上述操作,就应该重新考虑设计。尽量避免它