gpt4 book ai didi

java - 是否可以使用扩展父类(super class)方法参数的参数覆盖父类(super class)方法?

转载 作者:行者123 更新时间:2023-11-29 06:55:56 24 4
gpt4 key购买 nike

假设我有这样一个类:

abstract class Something {}

它有一个层次结构,类扩展了它:

class FirstSomething extends Something {}
class SecondSomething extends Something {}

然后在其他地方我有一个类使用这些东西:

abstract class A {
public void setSomething(Something something) {
//Process the something
}
}

我能否指定 A 的子类,以便它用更具体的“某物”类覆盖 setSomething 方法?这是我希望能够做到的:

class B extends A {
@Override
public void setSomething(FirstSomething something) {
//Process the something
}

class C extends A {
@Override
public void setSomething(SecondSomething something) {
//Set the something
}

目前我正在 A 类中做这样的事情:

public void setSomething(Something something) {
checkClass(something);
//Use the something
}
protected abstract void checkClass(Something something);

如果 SuperSomething 的类型不适合这些类,则 B 类和 C 类在 checkClass 方法中抛出异常。

编辑:我已经尝试使用上面的确切方法签名,但是子类方法没有覆盖 super 的方法,我想我真的在问:有没有办法在父类(super class)的定义中指定一个方法,在编译时检查父类(super class)的子类的 setSomething 方法中允许的对象类型?

最佳答案

您可以通过指定类型可以是 Something 或其子类之一来使 A 类成为泛型(我已将 setSomething 方法抽象化,但您可以提供如果需要,可以实现)。

abstract class A <T extends Something> {
public abstract void setSomething(T something);
}

然后强制类型 T 成为您希望在子类中使用的特定类。

class B extends A<FirstSomething> {
@Override
public void setSomething(FirstSomething something) {
//Set the something
}
}

class C extends A<SecondSomething> {
@Override
public void setSomething(SecondSomething something) {
//Set the something
}
}

关于java - 是否可以使用扩展父类(super class)方法参数的参数覆盖父类(super class)方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34297577/

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