Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/flash/4.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 是过载还是超控?_Java - Fatal编程技术网

Java 是过载还是超控?

Java 是过载还是超控?,java,Java,覆盖。您正在扩展类,并重写超类方法 重载将如下所示: public class overload1 { public Object show() { return "0"; } } class overload2 extends overload1{ public String show(){ return "1"; } } 最简单的测试方法是将@覆盖: public class overload1 { pub

覆盖。您正在扩展类,并重写超类方法

重载将如下所示:

public class overload1 {
    public Object show()
    {
        return "0";

    }

}
class overload2 extends overload1{
    public String show(){
        return "1";
    }
}

最简单的测试方法是将
@覆盖

public class overload1 {
    public Object show()
    {
        return "0";
    }
    public Object show(Object arg)  // Same method name, but different arguments.
    {
        return "0";
    }
}

因此,它是一个有效的覆盖(考虑到Java>1.5)

您所做的就是覆盖。重载是指两个方法名称相同但参数不同

希望有帮助:)

意味着在同一个类中使用不同的参数编写相同的方法名,意味着在超类和子类中编写相同的方法


在您的示例中,您在超类和子类中编写相同的方法,因此它是方法重写。

方法重载意味着两个或多个方法具有相同的名称,但签名不同(即不同的输入参数类型、不同的返回类型)

方法重写意味着在继承的类中具有相同方法的不同实现。这两个方法将具有相同的签名,但实现不同


因此,在您的示例中,重载2类的show()重写重载1类的show()

这是一种重写类型,因为在重载中,参数必须是change

这是一种重写原因,您刚刚重新定义了父类重载1中已定义的方法show()。重载处理同一类中具有相同方法名称但参数不同的多个方法。

这是一种覆盖。请参阅Tom Jeffery的答案以了解过载

我想你可能会问“你能通过改变返回类型来过载吗?” 你不能那样做。您需要更改方法签名(参数类型列表)以重载。您可以在同一个类或子类中执行此操作


重写意味着超类中的方法不再可访问。换句话说,通过对
overload2
的实例调用
.show()
,可以直接到达
overload1.show()
?如果不是,则是重写。

您可以尝试在
overload2
中的
show
方法中添加
@override
注释,查看编译是否失败。AFAICS这是一个重写。@Nipuna Silva强制编译器检查该方法是否确实重写了父类中的任何方法,或者因为java 6这个注释也用于标记接口方法的实现。+1但在java中。。。不完全是。重载时不考虑返回类型<代码>intx(){};字符串x(){}
无效(在语言级别,它实际上在字节码中有效)。此外,正如post所示,重写方法的返回类型不必相同;它可以是一种限制性更强的类型(对原语进行排除)。+1(对链接)。但是,方法重载可以跨越多个类。如果
overload2
中的方法采用了一个参数,则该方法将被重载(当通过类型
overload2
访问时)而不是重写。
class overload2 extends overload1{
    @Override
    public String show(){
        return "1";
    }
}