Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/318.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么在这种情况下,重写Setter方法不起作用_Java_Oop_Inheritance - Fatal编程技术网

Java 为什么在这种情况下,重写Setter方法不起作用

Java 为什么在这种情况下,重写Setter方法不起作用,java,oop,inheritance,Java,Oop,Inheritance,关于标题,我很抱歉,因为我找不到更好的,所以任何编辑将不胜感激 考虑以下类别: public interface GlobalDashlet { public Collection<? extends GlobalDashletSetting> getSettings(); public void setSettings(Collection<? extends GlobalDashletSetting> settings); }

关于标题,我很抱歉,因为我找不到更好的,所以任何编辑将不胜感激

考虑以下类别:

public interface GlobalDashlet {        
    public Collection<? extends GlobalDashletSetting> getSettings();    
    public void setSettings(Collection<? extends GlobalDashletSetting> settings);

}

public class Dashlet implements GlobalDashlet { 
    private Collection<DashletSetting> settings;
    public Collection<DashletSetting> getSettings(){
        return settings;
    }
    //This Wont Work
    public void setSettings(Collection<DashletSetting> settings) {
        this.settings = settings;
    }

    //This Will Work
    public Collection<DashletSetting> getSettings(){
       return settings;
    }
}


public class DashletSetting implements GlobalDashletSetting {
}
公共接口GlobalDashlet{

公共集合,因为它有不同的签名


Collection
不是
Collection,因为它有不同的签名


Collection
不是
Collection,因为重写的方法不能限制输入变量的范围。原始方法可以接受扩展
GlobalDashletSetting
类的任何内容,但重写的方法仅限于
GlobalDashletSetting
类的一个子类,因为重写的方法无法限制输入变量的范围。原始方法可以接受扩展
GlobalDashletSetting
类的任何内容,但重写的方法仅限于
GlobalDashletSetting
class

的一个子类,原因是返回类型可能是

重写方法时,始终可以返回更具体的类型(即子类型)。下面是一个更容易理解的示例:

class NumberProvider {
    Number getNumber() { return 1.23; }
}

class IntegerProvider extends NumberProvider {

    // Returning a more specific type when overriding:
    @Override
    Integer getNumber() { return 42; }
}

类型
Collection
Collection的适当子类型,原因是返回类型可能是

重写方法时,始终可以返回更具体的类型(即子类型)。下面是一个更容易理解的示例:

class NumberProvider {
    Number getNumber() { return 1.23; }
}

class IntegerProvider extends NumberProvider {

    // Returning a more specific type when overriding:
    @Override
    Integer getNumber() { return 42; }
}


类型
Collection
Collection的一个适当的子类型,它不能解释覆盖为什么对getter有效。
您需要覆盖确切的签名,而不是它的一部分。
不能解释它吗?因为java就是这样工作的OP清楚地问为什么它对getter有效而对setter无效。“您需要覆盖确切的签名"没有解释为什么可以用不同的返回类型重写。不能用返回字符串的方法重写返回整数的方法。但是可以重写返回
CollectionIt’s的方法getter和setter是不同的,因为covarience和contravarience。这并不不同。它们都是方法。java使用重写的ethod签名。这不能解释重写为什么对getter有效。
您需要重写确切的签名,而不是它的一部分。
没有解释它?因为java就是这样工作的OP清楚地问为什么它对getter有效而对setter无效。“您需要重写确切的签名”没有解释为什么可以用不同的返回类型重写。不能用返回字符串的方法重写返回整数的方法。但是可以重写返回
CollectionIt’s的方法getter和setter是不同的,因为covarience和contravarience。这并不不同。它们都是方法。java使用重写的方法签名。我有同样的问题我有同样的问题你如何用这种推理解释getter方法的行为?从java 5及以上版本开始,重写时允许使用方法的返回类型。你如何用这种推理解释getter方法的行为?从java 5及以上版本开始,
co variant
重写hanks时允许返回方法类型。虽然@Pranalee先回答,但您的答案更完整。尽管@Pranalee先回答,但您的答案更完整