在Java编程语言中,继承是面向对象编程中的一个核心概念。它允许一个类继承另一个类的属性和方法。当我们需要在一个子类中实现与父类不同的行为时,我们可以通过重写(Override)方法来实现。重写方法使得子类能够提供与父类方法不同的实现,同时保持方法的签名不变。
基类与子类
首先,我们定义一个基类Parent,它包含一个方法getValue。然后,我们创建一个继承自Parent的子类Child,并在其中重写getValue方法。
class Parent {
public int getValue() {
return 10;
}
}
class Child extends Parent {
@Override
public int getValue() {
return 20;
}
}
在这个例子中,Parent类的getValue方法返回10,而Child类的getValue方法返回20。
通过子类对象调用重写方法
要调用重写的方法并获取其返回值,我们需要使用子类对象。这是因为方法调用时,Java运行时会根据对象的实际类型来决定调用哪个方法,而不是对象的声明类型。这个过程称为多态。
public class Main {
public static void main(String[] args) {
Parent parent = new Child(); // 创建子类对象,但引用指向基类类型
int value = parent.getValue(); // 调用重写的方法
System.out.println("Value: " + value); // 输出方法返回值
}
}
在这个例子中,尽管parent是一个基类类型的引用,但由于我们实际上创建了一个Child对象,所以当我们调用getValue方法时,它会调用Child类中重写的方法,并返回20。
实际应用
在实际应用中,重写方法通常用于实现更具体的业务逻辑。以下是一个更具体的例子:
class Employee {
protected String getName() {
return "John Doe";
}
}
class Manager extends Employee {
@Override
protected String getName() {
return "Jane Smith";
}
}
public class Main {
public static void main(String[] args) {
Employee employee = new Manager();
System.out.println("Employee Name: " + employee.getName()); // 输出 "Employee Name: Jane Smith"
}
}
在这个例子中,Employee类有一个getName方法,它返回一个默认的名字。Manager类继承自Employee并重写了getName方法,以返回管理者的名字。当我们创建一个Manager对象并使用基类引用调用getName方法时,它将调用重写的方法,并返回“Jane Smith”。
总结
通过子类对象调用重写的方法并获取其返回值是Java中实现多态的一种常见方式。这种方法允许子类提供与父类不同的行为,同时保持方法的签名不变。在实际应用中,这种方法可以用于实现更复杂的业务逻辑和更灵活的代码设计。
