来自:《Java语言程序设计基础篇》 第2篇面向对象程序设计
覆盖例子:
/**
* @(#)overridesTest.java
*
* overridesTest application
*
* @author
* @version 1.00 2013/6/3
*/
public class overridesTest {
public static void main(String[] args) {
// TODO, add your application code
A a = new A();
a.p(10);
}
}
class B {
public void p(int i) {
}
}
class A extends B {
//This method overrides the method in B
public void p(int i) {
System.out.println(i);
}
}
输出:
10
重载例子:
/**
* @(#)overloadsTest.java
*
* overloadsTest application
*
* @author
* @version 1.00 2013/6/3
*/
public class overloadsTest {
public static void main(String[] args) {
// TODO, add your application code
A a = new A();
a.p(10);
}
}
class B {
public void p(int i) {
System.out.println("Class B method.");
}
}
class A extends B {
//This method overrides the method in B
public void p(double i) {
System.out.println(i);
}
}
输出:
Class B method.
重载方法和覆盖方法的区别:重载方法就是提供多于一个方法,这些方法有相同的名字但签名不同;
覆盖方法就是在子类中定义一个方法,该方法与父类中方法使用相同的签名,并且返回值类型也相同。
由以上两个例子分析得知,第一个例子,方法名字和参数类型都一致,因此是覆盖方法;而第二个例子中的方法名字一致,但参数类型不同,因此是重载,只调用父类B中的方法p。