Java继承: hiding fields

标签 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);
    }
}

以及应该隐藏字段并使用父类(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_1FIELD_2FIELD_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/

相关文章:

java - 注释@Transactional。如何回滚?

java - 访问祖先和父方法的正确(Java)约定?

C# - 使所有派生类调用基类构造函数

c++ - 派生纯虚函数的实现

c# - 如何声明两个类以便将它们传递给同一个函数?

java - 如何使用节点在堆数据结构中实现渗透功能?

Java:Thread.currentThread().sleep(x) 与 Thread.sleep(x)

java - 改善太空外星人的移动

c++ - std::list 接口(interface)内存泄漏

java - 试图弄清楚继承和多态性