gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 06:57:02 26 4
gpt4 key购买 nike

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

最佳答案

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

MyClass.create() 我这样做时没有实例化 MyClass 类型的对象,因此如果没有实例化,Java 不会在内存中为 name 变量保留任何空间

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

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

您可以在调用此 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
}

关于java - 使用静态方法构造扩展当前类的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22586839/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com