java:重载时的不同返回类型

pse*_*giu 2 java types overloading return

我有这样一个类树:

master class abstract class Cell
AvCell extends Cell
FCell extends Cell
Run Code Online (Sandbox Code Playgroud)

我有一个抽象方法getValue()Cell

难道posibble使方法getValue()返回intAvCellStringFCell?我可以使用泛型int String吗?

谢谢!

Yan*_*eve 14

你可以使用泛型并声明一个Cell<T>.然后就getValue()回来吧T

abstract class Cell<T> {

   abstract T getValue();

}
Run Code Online (Sandbox Code Playgroud)

现在:

class AvCell extends Cell<Integer> {
}
Run Code Online (Sandbox Code Playgroud)

class FCell extends Cell<String> {
}
Run Code Online (Sandbox Code Playgroud)


Jes*_*erE 8

但是,您可以在子类化时缩小返回类型.这被称为"协变返回类型".如果基类中的方法返回T,则允许在子类中重写该方法并让它返回T的子类.


tan*_*ens 8

您可以执行以下操作:

abstract class Cell<T> {
    public abstract T getValue();
}

class AvCell extends Cell<Integer> {
    public Integer getValue() {
        return 0;
    }
}

class FCell extends Cell<String> {
    public String getValue() {
        return "foo";
    }
}
Run Code Online (Sandbox Code Playgroud)