Java中有两个非常重要的概念,即覆写(overriding)和重写(overloading)。这两个概念虽然名字很相似,但是它们在Java程序中的作用以及实现方式却是不同的。
覆写是指子类对父类中的某个方法进行重写,使得子类中的方法覆盖掉了父类中的同名方法。覆写通过继承实现,是实现多态的基础。
// 父类A public class A { public void method() { System.out.println("父类A的方法"); } } // 子类B public class B extends A { @Override public void method() { System.out.println("子类B覆写父类A的方法"); } } // 测试 A a = new B(); a.method(); // 输出:子类B覆写父类A的方法
在上面的例子中,子类B重写(使用@Override注解修饰)了父类A中的method()方法。当我们创建了B的对象并调用它的method()方法时,会输出子类B覆写后的内容,而不是父类A的内容。
而重载(overloading)则是指在一个类中定义多个同名的方法,但它们的参数列表不同。当我们调用这个方法时,Java会根据调用的参数列表来决定具体调用哪个方法。重载和覆盖的实现方式不同,重载是通过方法签名来进行区分的。
public class C { public void method(int a) { System.out.println("方法1:" + a); } public void method(double a) { System.out.println("方法2:" + a); } public void method(String a) { System.out.println("方法3:" + a); } } C c = new C(); c.method(1); // 输出:方法1:1 c.method(1.0); // 输出:方法2:1.0 c.method("1"); // 输出:方法3:1
在上面的例子中,我们定义了三个名为method()的方法,它们的参数列表分别是int、double、String。当我们调用这个方法时,Java会根据调用的参数类型来选择具体调用哪个方法。
在Java中,覆盖和重载是很重要的概念,它们在不同场合下都扮演着不同的角色。程序员需要了解它们的不同之处,并在实际编程中正确地使用它们。