Java 如何让子类用扩展类型重写父抽象方法?

Java 如何让子类用扩展类型重写父抽象方法?,java,inheritance,overriding,abstract-class,abstract,Java,Inheritance,Overriding,Abstract Class,Abstract,比如说 public abstract class ParentClass { public abstract FooType getFoo(); ... } 然后像 public abstract class SomeClass extends ParentClass { public abstract SpecialFooType getFoo(); //clashes with the parent! ... } 在本例中,来自SomeClass的g

比如说

public abstract class ParentClass {

    public abstract FooType getFoo();
    ...
}
然后像

public abstract class SomeClass extends ParentClass {

    public abstract SpecialFooType getFoo(); //clashes with the parent!
    ...
}

在本例中,来自SomeClass的getFoo()应该是实现SpecialFooType接口的FooType。然而,我不知道如何设置这个语法

继承比仅仅在某些类声明上添加扩展更重要

例如,您的类必须遵循。这个原则给出了覆盖方法的规则

它实际上允许缩小返回值的类型;比如:基类有
Number getFoo()
;子类可以执行
Integer getFoo()
。但在您的情况下,返回类型是不同的;因此,你的想法在概念层面上根本是错误的

这背后的原因。如果您有调用该方法的客户端代码,客户端必须需要知道它是否在基类上调用该方法。。。或者某个子类。换句话说:客户机代码必须能够处理数字响应,因此当然,它将能够处理返回的整数。现在考虑在你的设置中应该如何工作…正如我所说的:不会的


为了完整性:LSP说返回类型可以缩小,而方法参数可以扩大。因此,当base foo()接受一个整数时,子类foo()可以接受一个数字。

继承比只在某些类声明上添加扩展更多

例如,您的类必须遵循。这个原则给出了覆盖方法的规则

它实际上允许缩小返回值的类型;比如:基类有
Number getFoo()
;子类可以执行
Integer getFoo()
。但在您的情况下,返回类型是不同的;因此,你的想法在概念层面上根本是错误的

这背后的原因。如果您有调用该方法的客户端代码,客户端必须需要知道它是否在基类上调用该方法。。。或者某个子类。换句话说:客户机代码必须能够处理数字响应,因此当然,它将能够处理返回的整数。现在考虑在你的设置中应该如何工作…正如我所说的:不会的


为了完整性:LSP说返回类型可以缩小,而方法参数可以扩大。因此,当base foo()接受一个整数时,子类foo()可以接受一个数字。

是否扩展
FooType
?@bradimus No。FooType只是它自己的类。但是,如果您从特定的子类获取FootType,我希望它具有其他属性,这些子类在接口SpecialFootType中定义。换句话说,我希望子类中的getFoo()返回FooType和SpecialFooType。您不能这样做,因为
SpecialFooType getFoo()
FooType getFoo()
只会在返回类型上有所不同。他们将有相同的签名。如果
ParentClass
是泛型的话,你可能会找到答案。你是什么意思?请参阅
SpecialFooType
extend
FooType
?@bradimus No。FooType只是它自己的类。但是,如果您从特定的子类获取FootType,我希望它具有其他属性,这些子类在接口SpecialFootType中定义。换句话说,我希望子类中的getFoo()返回FooType和SpecialFooType。您不能这样做,因为
SpecialFooType getFoo()
FooType getFoo()
只会在返回类型上有所不同。他们将有相同的签名。如果
ParentClass
是泛型的,你可能会找到答案。你是什么意思?我已经看过很多次提到的LSP了,但我根本不理解维基,也没有见过一个简单的答案来解释它,所以很不幸,我不知道如何应用它。我只是更新了我的答案。如果这还不够,我可以再给你一些提示。。。后来。现在出去遛狗;-)一只幽灵猫在遛狗。。。那太疯狂了,不客气。我添加了另一个关于参数类型的句子,希望这将帮助您完全了解LSP。感谢您的快速接受!这样就不会有太多的视觉;这是一个相当漆黑的夜晚,幽灵狗在遛狗。我已经看过很多次提到的LSP,但我根本不理解维基,也没有见过一个如此简单的答案来解释它,所以不幸的是,这不是一个我知道如何应用的原则。我只是更新了我的答案。如果这还不够,我可以再给你一些提示。。。后来。现在出去遛狗;-)一只幽灵猫在遛狗。。。那太疯狂了,不客气。我添加了另一个关于参数类型的句子,希望这将帮助您完全了解LSP。感谢您的快速接受!这样就不会有太多的视觉;这是一个漆黑的夜晚,幽灵狗在遛狗。