我有一个泛型类,它声明了一些字段和一个与它们一起使用的构造函数:
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);
}
}
以及应该隐藏字段并使用父类(super class)构造函数的子类:
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();
}
}
最佳答案
因为 GenericClass
对于那些 FIELD_1
、FIELD_2
、FIELD_3
具有 null
值
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);
}
}
This was the idea: GenericClass should just DECLARE fields and subclasses should initialize them. – Danylo Esterman 41 secs ago
字段不能这样,您需要重载抽象类的构造函数并强制子类在构造函数期间传递参数(通过隐藏默认构造函数),然后将这些传递的参数用于 JFrame
的构造函数
关于Java继承: hiding fields,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22736724/