如何更改子类的属性值

时间:2019-04-03 14:58:03

标签: java polymorphism

这是一个普遍的问题。我找不到正确的答案,可能是因为我不知道在浏览器中写什么才能获得良好的结果:

如果我有一个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这样的演员表。和我得到相同的结果。

1 个答案:

答案 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();
}

但是,只要需要执行上述操作,就应该重新考虑设计。尽量避免它