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";
}
}