Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/366.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在数组列表中存储抽象类_Java_Abstract Class - Fatal编程技术网

Java 在数组列表中存储抽象类

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()

我想将扩展抽象类的几个类的类对象存储在数组列表中。请注意,我必须使用抽象类而不是接口,因为类Country将包含更多功能

其思想是以后访问此类对象,创建它们的对象并调用方法

问题:我如何实现这一点,因为下面的代码会产生错误

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
,并获得一些不同的行为。