我有一个关于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是否为程序员提供了节省时间的机制。

最佳答案

除非您覆盖子类中的方法,否则必须强制转换:

FooInherited foo = new FooInherited();
Whatever w = ((FooInherited)foo.bar()).baz();

但是,由于java中的covariant return types,您可以像这样覆盖它:
public class FooInherited extends Foo {


        @Override
        public FooInherited bar()
        {
            return this;
        }
 ...
 }

覆盖之后,您不再需要强制转换,因为foo的静态类型是FooInherited:
FooInherited foo = new FooInherited();
Whatever w = foo.bar().baz();

10-01 01:53