gpt4 book ai didi

java子类有方法返回它的类

转载 作者:塔克拉玛干 更新时间:2023-11-02 07:57:49 24 4
gpt4 key购买 nike

好吧,也许这是一个愚蠢的问题。但我只是想知道这是否可以用 java 完成。

abstract public class ParentClass<T> { 
abstract public T getTest();
}

在子类中

public class SubClass extends ParentClass<MyObject> {
public MyObject getTest() {
// I can return the object with class MyObject
return null;
}
}

我的问题是我可以在子方法中返回类类型吗?我的意思是,是否可以通过在 ParentClass 中添加一些代码来完成,所以我可以在下面这样做?

例如

public class Sub1Class extends parentClass<Object1> {
public Object1 getTest() { }
// I want to have a method that return it's class in the superclass
public Sub1Class getItClassObject() { }
}

其他例子

public class Sub2Class extends parentClass<Object2> {
public Object2 getTest() { }
// I want to have a method that return it's class in the superclass
public Sub2Class getItClassObject() { }
}

再举一个例子

public class Sub3Class extends parentClass<Object3> {
public Object3 getTest() { }
// I want to have a method that return it's class in the superclass
public Sub3Class getItClassObject() { }
}

如果您看到,Sub1Class、Sub2Class 和 Sub3Class 中的方法 getItClassObject 将遵循它的类。但是我不想为每个子类添加相同的方法,只想在父类中添加一些代码(如果可行的话),所以在子类中,我可以直接调用 getItClassObject 而无需在每个子类中编写所有代码。

通常我是这样在ParentClass中添加方法的。

abstract public class ParentClass<T> {
abstract public T getTest();
public Object getItClassObject() { }
}

所以在子类中我只是实例化类,但我必须再次转换 :(

Sub1Class sub1Class = new Sub1Class();
Sub1Class after1Cast = (Sub1Class) sub1Class.getItClassObject();

Sub2Class sub2Class = new Sub2Class();
Sub2Class after2Cast = (Sub2Class) sub2Class.getItClassObject();

我认为这不能用java来完成。但我不知道是否有线索可以解决这个问题。谢谢

最佳答案

这就是你想要我想的。以下编译:

abstract class A {
public abstract A getA();
}

class B extends A {
// Declared to return a B, but it still properly overrides A's method
@Override
public B getA() {
return new B();
}
}

class C extends A {
// Declared to return a B, but it still properly overrides A's method
@Override
public C getA() {
return new C();
}
}

如您所见,A 声明getA() 方法返回一个A。但是,您可以限制子类中的返回类型,如图所示。

关于java子类有方法返回它的类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3926519/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com