java - java中子类的实例化

标签 java abstract-class subclass

我有一个像这样的抽象类:

public abstract class MyAbstractClass {

    protected String greeting;

    public void run() {
        doSomething();
    }

    public abstract void doSomething();
}

...以及像这样的子类:

public class MyClass extends MyAbstractClass {

    public MyClass() {
        this.greeting = "Hello, World!";
    }

    public void doSomething() {
        System.out.println(greeting);
    }

    public static void main(String[] args) {
        MyAbstractClass c = new MyClass();
        c.run();
    }
}

我将创建多个子类,所有子类都将具有相同的 main 方法,仅实例化子类。有没有一种更简洁的编写方法,这样我就不需要在每个子类中使用不同的子类名称重复 main 方法?因此,如果我创建一个名为 MyOtherClass 的新子类,我不需要将 main 方法放入 MyAbstractClass c = new MyOtherClass();

我想我可以反过来做,我从抽象类运行 main 并实例化其中的子类,但是每次我想更改实例化的子类时,我显然需要更改new 之后的类名。我想我正在寻找一种在抽象类中定义主方法的方法,这样当我运行子类时,它会实例化子类的副本而不是抽象类。如果这是有道理的...

最佳答案

这似乎很适合 factory method pattern 。尝试这样的事情:

public abstract class MyAbstractClass {

    protected String greeting;

    public void run() {
        doSomething();
    }

    public abstract void doSomething();

    public abstract MyAbstractClass makeClass();

}

public class MyClass1 extends MyAbstractClass {

    public MyClass1() {
        this.greeting = "Hello, World!";
    }

    @Override
    public void doSomething() {
        System.out.println(greeting);
    }

    @Override
    public MyAbstractClass makeClass() {
        return new MyClass1();
    }

}

然后,每当您需要创建特定实例时,只需在位于您认为最方便的位置的 main() 方法的单个实现中调用 makeClass() 即可,例如在 MyAbstractClass 中:

MyAbstractClass mac = new MyClass1();
MyAbstractClass obj = mac.makeClass();

最后一行将根据用于实例化具体对象的类返回适当的实例。

关于java - java中子类的实例化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23327493/

相关文章:

java - 为什么按下 android 键盘上的 Go 会向 onEditActionListener 发送两个 KeyEvent

c++ - C++ 中模板化子类专门化的限制

swift - 您是否需要从每个子类的函数调用父类(super class)的实现

java - 无法在主类中找到子类的变量

java - Android CallLog Content Provider 引发 java.lang.IllegalArgumentException

java - Spring Transaction 尝试在选择查询后触发更新

java - "<T extends ...>"返回类型的意外编译器警告

java - 为抽象 java 类制作 JUnit 测试用例?

c++ - 我如何在 Awesomium 中设置监听器? ("Field type ' Listener' is an abstract class"error)

python - 没有抽象方法的抽象类在python中创建对象