使用静态方法构造扩展当前类的对象

时间:2014-03-23 03:47:55

标签: java static abstract

我有一个由“Wall”和“Gate”扩展的抽象类“TapeObject”。每个TapeObject都由它的名称标识(在构造函数中设置)。

public static TapeObject create(String format) {
    if (format.length() != 1) {
        return null;
    }
    TapeObject tmpobj;
    if (format.equals("w")) {
        return tmpobj = new Wall (this.name);
    }
    if (format.equals("g")) {
        return tmpobj = new Gate (this.name);    
    }
    return null;
}

为什么我的IDE说“找不到符号Wall / Gate”,“无法从静态上下文中引用非静态变量名称”?我是java的新手。如何正确创建和返回对象?方法必须保持静态。

1 个答案:

答案 0 :(得分:1)

您无法从静态方法引用类/实例变量,因为静态方法与其类的特定实例无关。你指的是静态方法中的name,但是例如,如果我说

MyClass.create()我没有实例化MyClass类型的对象,所以没有实例化,Java不会为name变量在内存中保留任何空间

静态方法旨在用作辅助方法或util方法。

此外,您有一个名为create的方法很奇怪。创建被称为实例化,constructor的工作是处理此逻辑。

您可以在调用此create方法

的类中尝试此操作
TapeObject to1;
if (format == "w") {
  to1 = new Wall("Berlin Wall")
}

您的Wall构造函数应如下所示:

public Wall(String name) {
  super(name); // passes the name field to your superclass
}