Java中,重载(Overloading)和重写(Overriding)都是面向对象编程中的概念,但它们的含义和作用不同。
重载是指在同一个类中,可以定义多个方法,这些方法的方法名相同,但参数列表不同(参数类型、个数或顺序不同),以便处理不同的参数类型或参数个数的情况。重载的方法必须在参数列表中有所不同,否则编译时会出现重复定义方法的错误。重载是编译时多态的一种体现,即在编译时根据方法的参数列表决定调用哪个方法。
重写是指子类对父类的某个方法进行重新实现,使得子类能够拥有自己的行为实现。重写方法的方法名、返回值类型、参数列表都必须与被重写的父类方法相同。重写方法的访问权限不能比被重写的父类方法更严格。重写是运行时多态的一种体现,即在运行时根据对象的实际类型来确定调用哪个方法。
总之,重载和重写是Java中的两个重要的面向对象编程的概念。重载允许在同一个类中定义多个方法,以便处理不同的参数类型或参数个数的情况;而重写则是子类对父类方法进行重新实现,使得子类能够拥有自己的行为实现。
重载的例子:
public class Calculator {
public int add(int x, int y) {
return x + y;
}
public double add(double x, double y) {
return x + y;
}
}
上面的代码中,定义了两个名为add的方法,一个是用于两个整数相加,另一个是用于两个浮点数相加。由于参数类型不同,Java可以通过方法的参数类型来区分它们。
重写的例子:
public class Shape {
public void draw() {
System.out.println("绘制形状");
}
}
public class Circle extends Shape {
public void draw() {
System.out.println("绘制圆形");
}
}
public class Square extends Shape {
public void draw() {
System.out.println("绘制正方形");
}
}
上面的代码中,Shape是一个父类,其中定义了一个名为draw的方法。Circle和Square都是Shape的子类,它们都重写了父类中的draw方法,并且实现了自己的行为,使得它们分别可以打印出"绘制圆形"和"绘制正方形"。在运行时,如果创建一个Circle或Square对象并调用它们的draw方法,则会执行子类中的方法,而不是父类中的方法。