Java继承......困惑

Tyl*_*ler 1 java inheritance

我有一个抽象的父类,有多个孩子.我希望孩子能够拥有一个对于该孩子的每个实例都相同的变量.我宁愿不将一个构造函数传递给孩子来告诉它它的名字,因为当它可以被硬编码时,它看起来很愚蠢.从我所读到的做下面的"隐藏"父实例变量,并没有按我的意愿工作.

public abstract class Parent {
    public String name = "the parent";
    public getName(name);
}
public class Child1 extends Parent {
    public String name = "Jon";
}
public class Child2 extends Parent {
    public String name = "Mary";
}

Child1 c = new Child1();
c.getName(); // want this to return "Jon", but instead returns "the parent".
Run Code Online (Sandbox Code Playgroud)

要清楚,基本上我想要的是像c.getClass().getName(),但我不希望结果依赖于类名,而是依赖于硬编码值.

谢谢

Isa*_*ett 6

您可以在父级中声明一个抽象方法,并让每个子级实现该方法以返回相应的名称,如下所示:

public abstract class Parent {
    public abstract String getName();
}

public class Child1 extends Parent {
    private static final String NAME = "Jon";
    public String getName() { return NAME; }
}

public class Child2 extends Parent {
    private static final String NAME = "Mary";
    public String getName() { return NAME; }
}
Run Code Online (Sandbox Code Playgroud)