Tru*_*Tru 4 java oop abstract-class
考虑一下我在Java中有一个抽象类的情况;
public abstract class Foo
{
public abstract int myOperation();
}
Run Code Online (Sandbox Code Playgroud)
现在,它的一些子类可能会覆盖myOperation,就像这样;
class A extends Foo
{
public int myOperation()
{
// Do stuff
}
}
Run Code Online (Sandbox Code Playgroud)
但是如果一个子类想要返回一些其他数据类型,比如;
class A extends Foo
{
public Object myOperation()
{
// Do stuff
}
}
Run Code Online (Sandbox Code Playgroud)
我希望方法名称相同,以保持设计完整,以便客户端不一定选择要调用的方法.除了使用一个是空实现或使用Object作为返回类型的单独方法之外,还有其他解决方法吗?或者这是OO设计的一个严重错误的例子?
我听说过C++中的Covariant返回类型,并想知道Java是否还有其他机制.
我也可以在这里自由使用界面.
你不能.既不使用继承,也不使用接口.这将是一个编译器错误,所以你根本无法运行你的程序.
您可以返回java.lang.Object并返回您想要的任何对象.如果需要返回基元,可以返回其对象包装器.
Java具有共变量返回类型,但返回类型必须更具体,而不是更具体.如果父类中的方法返回,int那么它的所有子类型也必须这样做,否则这种方法的调用者并不真正知道它所获得的类型.
Foo foo = new A()
int i = foo.method();
Run Code Online (Sandbox Code Playgroud)
如果method()返回任何内容,但int此语句不再有意义.
当你可以做的是,如果超类中的方法返回Object并且一个dervice类返回,Number那么两者的子类都可以返回Integer
| 归档时间: |
|
| 查看次数: |
440 次 |
| 最近记录: |