java创建抽象类实例_创建扩展抽象类的子类的实例(Java)

叶氏.这很容易(除非我误解)

你必须使用原型设计模式(或我在这里展示的变体)

当您在运行时之前不知道工厂类可能是什么时,它很有用.与AbstractFactory不同,您可以在其中创建新类型的不同子类,但您可以根据特定条件选择一个.

使用原型,您可以简单地将“原始”对象(原型)注入到您的应用程序中(通过完整的未来依赖注入框架或简单的类名称),然后创建它的新实例.

这是一个示例代码,显示如何使用变体(不使用clone但newInstance方法)执行此操作

public abstract class Application {

public Application newInstance() {

try {

return this.getClass().newInstance();//this creates an instance of the subclass

} catch( InstantiationException ie ){

throw new RuntimeException( ie );

} catch( IllegalAccessException iae ){

throw new RuntimeException( iae );

}

}

public String toString() {

return "This is the class named: \""+ this.getClass().getSimpleName()+"\"";

}

}

// subclasses doesn't repeat the creation part

// they just have to override specific methods.

class FirstClass extends Application {}

class SecondClass extends Application {}

class ThirdClass extends Application {}

其余代码可以编程到Application接口:

public void doSomethingWith( Application application ) {

System.out.println( application.toString() );

}

public void startApplication( Application app ) {

// etc etc

}

每当您需要新实例时,您只需致电:

Application newApp = original.newInstance();

这将创建正确的类型.

如您所见,子类未指定如何创建新的子类,这些都在基类中.

调用newInstance方法将始终创建一个相同类型的新实例.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java中,抽象类无法直接实例化。但是可以通过创建子类实例化子类的对象来实现创建对象。可以使用多态的特性,将抽象类作为引用类型来实例化子类对象。通过这种方式,可以创建一个子类对象,但请注意,实际上实例化的是子类对象,而不是抽象类本身。以下是一个示例代码: ```java public abstract class AbstractClass { // 抽象方法 abstract void abstractMethod(); } public class ConcreteClass extends AbstractClass { @Override void abstractMethod() { // 实现抽象方法 System.out.println("This is the implementation of abstractMethod in ConcreteClass"); } } public class Main { public static void main(String[] args) { AbstractClass obj = new ConcreteClass(); // 使用抽象类作为引用类型实例化子类对象 obj.abstractMethod(); // 调用子类的方法 } } ``` 在上面的例子中,通过创建一个继承自抽象类子类`ConcreteClass`,并实例化子类对象,我们可以创建抽象类的对象。当然,需要确保子类实现了抽象类中定义的所有抽象方法。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [Java抽象类作为引用类型创建对象](https://blog.csdn.net/qq_44993268/article/details/120558439)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 50%"] - *2* *3* [spring无法为java抽象类注入实例对象属性的问题](https://blog.csdn.net/u012929855/article/details/109505012)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值