java - 在子类中引用抽象父类(super class)字段

标签 java inheritance initialization

我有一个 abstract 父类(super class),它有一个 protected String 变量。它未在父类(super class)中初始化。

我想做的就是初始化并在子类中使用它。所以,我有这样的东西:

    public class MySubclass extends MyAbstractSuperclass {        
        thing = "i'm a thing";
        [...]
    }

看起来很简单,因为继承的全部意义在于在不同的上下文中重用类及其字段。但这是错误的:token“thing”语法错误,VariableDeclaratorId expected after this token

我可以通过在子类初始化两边加上方括号来编译它。我想知道的是为什么第一种方式是错的,为什么用括号修复。感谢您的帮助。

编辑:我很感激我可以通过使用构造函数来解决这个问题的提示。但是,我仍然很好奇以这种方式使用父类(super class)字段到底有什么问题,因为在我看来它非常直观。而且,为什么大括号会修复它,用大括号包围一个语句到底意味着什么?循环结构?

最佳答案

这不是 Scala,你必须写一个明确的构造函数:

public class MySubclass extends MyAbstractSuperclass {        
    public MySubclass() {
        thing = "i'm a thing";
        [...]
    }
}

或者使用带参数的构造函数:

public abstract class MyAbstractSuperclass {

    protected final String thing;

    protected MyAbstractSuperclass(String thing) {
        this.thing = thing;
    }

}

public class MySubclass extends MyAbstractSuperclass {
    public MySubclass() {
        super("i'm a thing");
    }
}

关于java - 在子类中引用抽象父类(super class)字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14695151/

相关文章:

Java 包含不能按预期工作,因为 "someString"!= "someString"

java - Dropwizard - 在服务器启动时在类中运行 init 方法

c++ - 正在使用未初始化的变量 C++

java - 如何在websphere中打印JAX-RPC服务的SOAP消息版本

java - 访问 ArrayList 中的子类变量?

java - 在这种情况下,我选择组合而不是继承是正确的吗?

c++ - 继承类作为 (void*) 传递给回调函数

c - 菜单中的字母选项在 C 程序中声明为未声明

java - 静态初始化 block

java - 无法使用 Java SDK 将文件上传到 OneDrive