Java子类重新父类方法

简介

在面向对象编程中,继承是一个重要的概念。它允许我们创建一个新的类,并从一个现有的类中继承属性和方法。有时候,我们需要在子类中重新定义父类中的方法。这是通过方法重写来实现的。

重写是指在子类中定义与父类中具有相同名称、参数列表和返回类型的方法。通过重写方法,我们可以根据子类的需求对方法进行定制化。

在本文中,我们将介绍Java中子类重新父类方法的概念,并提供一些代码示例来帮助理解。

流程图

flowchart TD
    A[父类] --> B[子类]
    B --> C[重写父类方法]
    C --> D[调用重写后的方法]

示例代码

考虑一个简单的示例,我们有一个父类Animal和一个子类Dog。父类中有一个方法makeSound(),子类中重新定义了这个方法。

class Animal {
    public void makeSound() {
        System.out.println("动物发出声音");
    }
}

class Dog extends Animal {
    @Override
    public void makeSound() {
        System.out.println("狗叫");
    }
}

public class Main {
    public static void main(String[] args) {
        Animal animal = new Animal();
        animal.makeSound(); // 输出: 动物发出声音

        Dog dog = new Dog();
        dog.makeSound(); // 输出: 狗叫
    }
}

在上面的示例中,Animal类是父类,Dog类是子类。子类Dog重写了父类Animal中的makeSound()方法,并打印出狗叫的消息。

main方法中,我们首先创建一个Animal对象并调用其makeSound()方法。由于Animal类中的makeSound()方法没有被子类重写,所以输出的消息是"动物发出声音"。

然后,我们创建一个Dog对象并调用其makeSound()方法。由于Dog类重写了makeSound()方法,所以输出的消息是"狗叫"。

方法重写的规则

方法重写有一些规则需要遵循:

  1. 方法名称、参数列表和返回类型必须与父类中被重写的方法相同。
  2. 重写的方法不能比父类中被重写的方法访问性更低。例如,如果父类方法是public,则子类中的重写方法也必须是public
  3. 重写的方法不能抛出比父类中被重写方法更多的异常。子类中的重写方法可以不抛出任何异常,或只抛出父类中被重写方法的异常的子集。
  4. 重写的方法不能使用比父类中被重写方法更窄的返回类型。子类中的重写方法的返回类型必须是父类中被重写方法返回类型的子类。

序列图

sequenceDiagram
    participant Animal
    participant Dog
    Animal->>Dog: 实例化Dog对象
    Dog-->>Dog: 调用makeSound()方法
    Dog->>Animal: 调用父类makeSound()方法
    Animal-->>Dog: 返回声音消息
    Dog->>Dog: 打印声音消息

上述序列图显示了父类Animal和子类Dog之间的交互过程。当我们实例化Dog对象并调用makeSound()方法时,该方法会通过继承调用父类Animal中的makeSound()方法。然后将声音消息返回给子类Dog,最后打印出声音消息。

结论

在Java中,子类可以通过重写父类方法来实现定制化的行为。重写方法的规则需要遵循,包括方法签名的相同、访问性的一致和异常的处理等。通过理解和运用方法重写的概念,我们可以更好地设计和组织面向对象的程序。