我有一个泛型类,它声明了一些字段和一个与它们一起工作的构造函数:
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();
}
}
答案 0 :(得分:1)
因为GenericClass
null
,FIELD_1
,FIELD_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}}的构造函数