gpt4 book ai didi

Java继承的返回类型

转载 作者:行者123 更新时间:2023-12-04 14:03:16 28 4
gpt4 key购买 nike

我有一个关于 Java 中继承方法的返回类型的问题。我有一个类和一个继承类。在继承的类中,有一个特定的方法。它还从返回自身实例的父类继承了一个方法。

我想要这样的类层次结构:

public class Foo {
public Foo bar()
{
return this;
}
}

public class FooInherited extends Foo {
public Whatever baz()
{
return new Whatever();
}
}

我的问题是我是否可以从其实例调用继承的方法,然后调用特定的方法而不覆盖该方法以返回继承的类或显式转换类。

现在我想要一个这样的代码片段:
FooInherited foo = new FooInherited();
Whatever w = foo.bar().baz();

我觉得这有点困难,但我不太确定 Java 在这种情况下是否有任何为程序员节省时间的机制。

最佳答案

您可以使用泛型,但它很快就会变得丑陋。

class Base<This extends Base<This>> {

public This myself() {
return (This) this;
}

}

class Sub<This extends Sub<This>> extends Base<This> {

public void subOnly() {}

}

{
Sub<?> sub = new Sub<>();
sub.myself().subOnly();
Base<?> base = sub;
// base.myself().subOnly(); // compile error
}

另一种方法是显式覆盖该方法:
class Base {

public Base myself() {
return this;
}

}

class Sub extends Base {

@Override
public Sub myself() {
return this; // or return (Sub) super.myself();
}

public void subOnly() {}

}

{
Sub sub = new Sub();
sub.myself().subOnly();
Base base = sub;
// base.myself().subOnly(); // compile error
}

关于Java继承的返回类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13084402/

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