本文主要是介绍根据不同类型 父类进去子类,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
假设有一个基类Base和几个继承自Base的子类Sub1、Sub2等,每个子类都会把自己的实例注入到一个静态的Map中。
首先,定义基类和子类:
public class Base {// 抽象方法,子类需要实现public void doSomething() {throw new UnsupportedOperationException("Should be implemented in subclasses");}
}public class Sub1 extends Base {@Overridepublic void doSomething() {// 实现具体的操作}public static final String TYPE = "Sub1";public Sub1() {// 注册自己到静态Map中Registry.register(TYPE, this);}
}public class Sub2 extends Base {@Overridepublic void doSomething() {// 实现具体的操作}public static final String TYPE = "Sub2";public Sub2() {// 注册自己到静态Map中Registry.register(TYPE, this);}
}
然后,定义用于注册实例的Registry类:
import java.util.HashMap;
import java.util.Map;public class Registry {private static final Map<String, Base> registry = new HashMap<>();public static void register(String type, Base instance) {registry.put(type, instance);}public static Base getInstance(String type) {return registry.get(type);}
}
最后,可以根据类型来获取对应的实例并调用方法:
public class Main {public static void main(String[] args) {Base sub1 = Registry.getInstance("Sub1");Base sub2 = Registry.getInstance("Sub2");if (sub1 != null) {sub1.doSomething();}if (sub2 != null) {sub2.doSomething();}}
}
这个例子中,我们定义了一个基类Base和两个子类Sub1和Sub2。每个子类在构造时会把自己注册到Registry的静态map中,并提供了一个doSomething的实现。然后,我们可以通过Registry来获取对应类型的实例并调用它们的方法。这个例子展示了如何根据类型自动调用对应子类的方法,而无需手动判断类型并进行类型转换。
这篇关于根据不同类型 父类进去子类的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!