相关疑难解决方法(0)

126
推荐指数
5
解决办法
15万
查看次数

Java:覆盖或重载方法?

我有一个方法,在名为"PlaceParser"的类中,extends"ModelParser":

protected Place parseModel(JSONObject element) ...
Run Code Online (Sandbox Code Playgroud)

Place是Model的子类.是否应将@Override注释添加到上面的代码中?由于该方法具有不同的返回类型,这仍然算作覆盖具有相同名称和参数的基类方法/返回类型是否改变了"签名"?

"ModelParser"方法看起来像"ModelT"也扩展了"Model":

protected abstract ModelT parseModel(JSONObject element)
            throws JSONException;
Run Code Online (Sandbox Code Playgroud)

更新@Jon Skeet:

基类声明如下:

public abstract class ModelParser<ModelT extends Model> {
Run Code Online (Sandbox Code Playgroud)

我以前没见过类的<ModelT extends Model>样式声明.

java inheritance overriding annotations overloading

5
推荐指数
1
解决办法
1886
查看次数

两个接口中具有相同签名但返回类型不同的方法

我有两个接口:

interface S {
    public String m1();
}

interface O {
    public Object m1();
}
Run Code Online (Sandbox Code Playgroud)

我决定在类Test中实现O和S:

class Test implements O, S {

}
Run Code Online (Sandbox Code Playgroud)

我的问题 :

为什么我必须只实现方法public String m1()而不是其他方法?其次,为什么我不能实现public Object m1()而不是public String m1()

java

5
推荐指数
1
解决办法
347
查看次数

为什么Java编译器为无参数的方法(getter方法)创建桥接方法

我确实理解需要创建桥接方法,例如需要传递参数的 setter 方法,但是 getter 方法呢?为什么Java也产生桥接方法呢?

下面是 ChatGPT 生成的虚拟代码,以使事情更加具体:

class Box<T> {
private T value;

public void setValue(T value) {
    this.value = value;
}

public T getValue() {
    return value;
}
}

class StringBox extends Box<String> {
public void setValue(String value) {
    System.out.println("Setting a String value in StringBox");
    super.setValue(value.toString());
}

public String getValue() {
    System.out.println("Getting String value from StringBox");
    return super.getValue();
}
}
Run Code Online (Sandbox Code Playgroud)

擦除后的 Box 类将具有以下方法: public Object getValue(); 在 StringBox 类中,我们定义了该方法: public String getValue() 但这两个方法具有相同的签名,并且重写方法的返回类型使用 String 作为返回类型,String 是 Object 的子类class(Covariant …

java generics overriding bridge

3
推荐指数
1
解决办法
108
查看次数

子类型和协变返回类型

我找到了一个解释什么是协变返回类型?但我不明智地理解这一切.

我认为Covariant返回类型理论上是一个函数返回的类型,该函数具有与内置基类函数相同的签名,其返回类型不同.

class Base{
   TypeX func( int i ){return typex;} // builtin function
};
class Derived:Base{
   TypeY func(int i){return typey;}
}
Run Code Online (Sandbox Code Playgroud)

我对这种所谓的协变返回类型的理解是否正确?[这个词让我很困惑.]

c# java

2
推荐指数
1
解决办法
1220
查看次数