Java 在数组列表中存储抽象类
我想将扩展抽象类的几个类的类对象存储在数组列表中。请注意,我必须使用抽象类而不是接口,因为类Country将包含更多功能 其思想是以后访问此类对象,创建它们的对象并调用方法 问题:我如何实现这一点,因为下面的代码会产生错误Java 在数组列表中存储抽象类,java,abstract-class,Java,Abstract Class,我想将扩展抽象类的几个类的类对象存储在数组列表中。请注意,我必须使用抽象类而不是接口,因为类Country将包含更多功能 其思想是以后访问此类对象,创建它们的对象并调用方法 问题:我如何实现这一点,因为下面的代码会产生错误 import java.util.ArrayList; public class Main { public static void main(String args[]) { new Main(); } public Main()
import java.util.ArrayList;
public class Main
{
public static void main(String args[]) {
new Main();
}
public Main() {
// The idea is to add the class of all specific countries to the countries array
ArrayList<Class<Country>> countryclasses = new ArrayList<Class<Country>>();
// Doesn't work
countryclasses.add(England.class);
// Doesn't work
Class<Country> englandclass = England.class; // Error
countryclasses.add(englandclass);
// Doesn't work
England england = new England();
Class<Country> country = england.getClass().getSuperclass().getClass();
// Class<Country> country = england.getClass().getSuperclass().getClass();
countryclasses.add(country);
for(Class<Country> countryclass : countryclasses) {
// Create an object from the class
// Call the getName() method
}
}
public abstract class Country {
abstract String getName();
}
public class England extends Country {
public String getName() {
return "England";
}
}
}
import java.util.ArrayList;
公共班机
{
公共静态void main(字符串参数[]){
新的Main();
}
公用干管(){
//其想法是将所有特定国家的类添加到国家数组中
ArrayList countryclasses=新的ArrayList();
//不起作用
countryclasses.add(England.class);
//不起作用
Class englandclass=England.Class;//错误
countryclasses.add(englandclass);
//不起作用
英格兰=新英格兰();
Class country=england.getClass().getSuperclass().getClass();
//Class country=england.getClass().getSuperclass().getClass();
countryclasses.add(国家);
对于(类countryclass:countryclass){
//从类创建对象
//调用getName()方法
}
}
公共抽象阶级国家{
抽象字符串getName();
}
英国的公共阶级扩展到全国{
公共字符串getName(){
返回“英格兰”;
}
}
}
如果您真的想拥有一个列表
而不是使用多态实例集合,您可以使用来定义将成为国家的类
,或者扩展它:
List<Class<? extends Country>> countryclasses = new ArrayList<Class<? extends Country>>();
Class<? extends Country> englandclass = England.class;
countryclasses.add(englandclass);
List如果您真的想拥有一个列表
而不是使用多态实例集合,您可以使用来定义将成为Country
的类或扩展它:
List<Class<? extends Country>> countryclasses = new ArrayList<Class<? extends Country>>();
Class<? extends Country> englandclass = England.class;
countryclasses.add(englandclass);
list您对多态集合的含义是什么?只是对象的集合?@dasskorpion多态集合是由其共同祖先定义的对象的集合。这是一个强大的功能,因为除其他外,您可以在集合的所有元素上调用相同的方法,但根据层次结构链的实际对象类型执行不同的行为,列表
将是一个多态性的国家集合,您可以为每个国家调用getName
,并获得一些不同的行为。多态性集合是什么意思?只是对象的集合?@dasskorpion多态集合是由其共同祖先定义的对象的集合。这是一个强大的功能,因为除其他外,您可以在集合的所有元素上调用相同的方法,但根据层次结构链的实际对象类型执行不同的行为,列表
是一个多态的国家集合,您可以为每个国家调用getName
,并获得一些不同的行为。