我有一个由“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的新手。如何正确创建和返回对象?方法必须保持静态。
答案 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
}