我有这个类BindingSample,其方法不带参数
public class BindingSample {
public void printMsg(){
System.out.println("Binding Sample no parameter");
}
}
另一个扩展BindingSample并使用相同方法签名但为其添加参数的类
public class application extends BindingSample {
public void printMsg(int i){
System.out.println("Changed my value " + i);
}
public static void main(String[] args) {
application app = new application();
app.printMsg(5);
}
}
输出更改为我的值5
为什么即使参数不同也能正常工作?为什么称为重载?我不认为它覆盖了因为覆盖方法,方法签名及其参数应该是相同的。
答案 0 :(得分:1)
为什么即使参数不同也能正常工作?
您application
类有一个printMsg
方法,只需要一个int
参数。因此app.printMsg(5)
有效。
请注意,进行以下更改将导致您的代码无法通过编译:
BindingSample app = new application();
app.printMsg(5);
因为现在编译器无法在printMsg
类中找到带有BindingSample
参数的int
方法。
为什么称为重载?我不认为它覆盖了因为覆盖方法,方法签名及其参数应该是相同的
覆盖和重载是两个不同的概念。
当多个方法共享相同的名称但具有不同数量的参数或不同类型的参数时,会发生方法重载。
您的application
类有两个printMsg
方法(一个继承自其超类),具有不同数量的参数。因此这是方法重载。
答案 1 :(得分:0)
重载意味着方法的名称应该相同。其他一切都可能不同(例如参数,返回类型,可抛出异常等)。由于示例中的两个方法都具有相同的名称,因此称为重载。
它的工作原理是,重载是编译时的现象,编译器只是检查方法对调用它的对象的可访问性。在您实例化application
类并使用printMsg
参数调用int
方法时。它工作正常,因为该方法存在于类中(或者可以被该对象访问)。