Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/372.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_Class_Generics_Inheritance_Abstract - Fatal编程技术网

Java 抽象类中的动态抽象类

Java 抽象类中的动态抽象类,java,class,generics,inheritance,abstract,Java,Class,Generics,Inheritance,Abstract,我对这个类构造有一个问题。我想以某种方式在Super1的构造函数中指定超类Super2的扩展类类型作为参数,但我不知道如何指定 我希望满足以下要求: 在dostufwithdostuff()内初始化Super2扩展类的实例 不要将带有Super2实例的参数添加到dostufwithdostuff()中 我认为你的问题有点太深奥了,无法理解你到底想要实现什么。以下工作是否可行(我相信它符合您描述的要求) 抽象类Super1{ 私有类Super3的定义在哪里?是否输入错误?不能直接实例化抽象类,

我对这个类构造有一个问题。我想以某种方式在Super1的构造函数中指定超类Super2的扩展类类型作为参数,但我不知道如何指定

我希望满足以下要求:

  • 在dostufwithdostuff()内初始化Super2扩展类的实例
  • 不要将带有Super2实例的参数添加到dostufwithdostuff()中

我认为你的问题有点太深奥了,无法理解你到底想要实现什么。以下工作是否可行(我相信它符合您描述的要求)

抽象类Super1{

私有类
Super3
的定义在哪里?是否输入错误?不能直接实例化抽象类,必须通过实例化子类来实例化抽象类。Super2 super=new Super2(“测试”);不起作用,您可以使用匿名内部类。另外:Super1扩展了Super3,而您没有Super3类。
super
是java@Stultuske是的,我知道这一点,这就是为什么我写了“我必须以某种方式在Super1的构造函数中给出扩展类”我可以实例化子类而不是超类。@Jens是的,这只是一个错误使用的示例名称
abstract class Super2 {
    Super2(String test) {
    }
    public void exit() {
    }
}
abstract class Super1 {
    abstract doStuff(Class<? extends Super2> super);
    protected doStuffWithDoStuff() {
         Super2 super2 = new Super2("test");
         doStuff(super2);
         super2.exit();
    }
}
class Test1 extends Super2 {
    Test1() {
        super();
    }
    public void doStuff() {
    }
}
class Test2 extends Super1 {
    doStuff(Test1 test) {
        test.doStuff();
    }
}
abstract class Super1 {

    private Class<? extends Super2> super2Type;

    protected Super1(Class<? extends Super2> super2Type) {
        this.super2Type = super2Type;
    }

    abstract doStuff(Class<? extends Super2> super);

    protected doStuffWithDoStuff() {
         Super2 super2 = super2Type.newInstance(); //Error handling omitted for brevity
         doStuff(super2);
         super2.exit();
    }
}