【问题标题】:How to instantiate a new object from an abstract class containing an instance of a HashMap? [closed]如何从包含 HashMap 实例的抽象类中实例化一个新对象? [关闭]
【发布时间】:2015-01-29 06:08:48
【问题描述】:

我相信抽象类不能被实例化。但是,我的抽象类中有一个 HashMap 实例,我想从中检索对象。有没有办法做到这一点?任何见解将不胜感激,在此先感谢!

编辑:

我实际上正在寻找一种使用诸如

之类的标记来实例化抽象类的方法
barnStack.push(new Animal("Cow"));

【问题讨论】:

  • 实例不能在类中。
  • "我相信抽象类不能被实例化。" 在java中这不是一个信念,而是一个事实。
  • 我实际上正在寻找一种使用诸如 barnStack.push(new Animal("Cow")); 之类的令牌来实例化抽象类的方法

标签: java polymorphism instantiation abstract


【解决方案1】:

我假设您指的是这样的结构:

abstract class MyClass {
    private Map<String, String> textMap = new HashMap<>();

    public void addText(String key, String value) {
        textMap.put(key, value);
    }
}

你问如果类不能被实例化,如何使用textMap。如果这是正确的,那么答案是它可以被抽象类(或者如果它是protected 的子类)中的方法使用。 MyClass 的子类的任何实例都可以调用该方法,该方法将访问 Map

class MySubclass extends MyClass {
}

MySubclass myobj = new MySubclass();
myobj.addText("Hello", "World!");

也可以使子类匿名:

MyClass myObj = new MyClass() {};
myobj.addText("Hello", "World!");

但是在这种情况下,超类更可能不是真正抽象的。

【讨论】:

  • 我实际上正在寻找一种使用诸如 barnStack.push(new Animal("Cow")); 之类的令牌来实例化抽象类的方法
  • @apebeast 好的,那么最好的选择可能是匿名类。我会将它添加到我的代码中。
  • 哇,我肯定需要多学习。谢谢短跑运动员!
【解决方案2】:

抽象类不能在 java 中实例化java oracle doc

所以你要做的就是创建一个新的具体类来扩展抽象类。然后你就可以实例化具体的子类了。

class ConcreteClassName extends AbstractClassName{
     //implement all the methods of the abstract class

     //optionaly you can add new methods if you want to
}

//获取抽象类的实例

AbstractClassName newObject = new ConcreteClassName();

现在您有了抽象类的实例。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-24
    • 2019-08-26
    • 2014-09-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多