我有一个像这样的抽象类:
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/