Java继承:隐藏字段

时间:2014-03-29 20:49:15

标签: java inheritance abstract-class

我有一个泛型类,它声明了一些字段和一个与它们一起工作的构造函数:

public abstract class GenericClass extends JFrame
{
    protected static String FIELD_1;
    protected static String FIELD_2;
    protected static String FIELD_3;

    public GenericClass()
    {
        super(FIELD_1+" "+FIELD_2+FIELD_3);
    }
}

应该隐藏字段并使用超类构造函数的子类:

public class ChildClass1
{
    protected static String FIELD_1 = "hello";
    protected static String FIELD_2 = "world";
    protected static String FIELD_3 = "!";

    public ChildClass
    {
        super();
    }
}
public class ChildClass2
{
    protected static String FIELD_1 = "another";
    protected static String FIELD_2 = "class";
    protected static String FIELD_3 = "!";

    public ChildClass
    {
        super();
    }
}

我不明白为什么创建的JFrame有标题null nullnull。我做错了什么?

更新

使用这些类非常简单:

public class Main
{

    public static void main(final String[] args)
    {
        new ChildClass1();
        new ChildClass2();
    }
}

1 个答案:

答案 0 :(得分:1)

因为GenericClass nullFIELD_1FIELD_2

FIELD_3值为public abstract class GenericClass extends JFrame { protected static String FIELD_1; protected static String FIELD_2; protected static String FIELD_3; public GenericClass() { // null +" " +null+null = `null nullnull` super(FIELD_1+" "+FIELD_2+FIELD_3); } }
JFrame
  

这就是这个想法:GenericClass应该只是DECLARE字段和子类应该初始化它们。 - Danylo Esterman 41秒前

对于字段你不能这样,你需要重载抽象类的构造函数并强制子类在构造函数中传递参数(通过隐藏默认构造函数)然后使用那些传递的参数用于{{1}}的构造函数