📜  Java程序的输出| 18(重写Override)(1)

📅  最后修改于: 2023-12-03 15:16:38.202000             🧑  作者: Mango

Java程序的输出:18(重写Override)

在Java中,方法的重写是面向对象编程中的重要概念之一。当子类继承自父类时,可以通过重写父类的方法来实现对父类方法的覆盖和修改。这种重写需要用到Java中的@Override注解。

重写的基本概念

当一个子类继承自父类时,如果它需要修改父类中的某个方法,可以通过重写(override)这个方法来实现。

public class Animal {
    public void eat() {
        System.out.println("Animal is eating.");
    }
}

public class Dog extends Animal {
    @Override
    public void eat() {
        System.out.println("Dog is eating.");
    }
}

在上面的代码中,子类Dog重写了父类Animal中的eat()方法。在Dog类中,使用了@Override注解来标注这是一个重写方法。在运行时,当我们调用Dog对象的eat()方法时,将会输出Dog is eating.这句话。

重写方法和父类的方法签名

当子类重写父类的方法时,需要遵守以下几条规则:

  • 方法名必须与父类方法名相同
  • 参数列表必须与父类方法参数列表完全相同
  • 返回类型必须与父类方法返回类型相同,或是其子类

在上面的代码中,子类Dog重写了父类Animal中的eat()方法,因为方法名、参数列表和返回类型都与父类相同。如果在Dog类中定义一个public void eat(String food)方法,那么它并不会重写Animal类中的eat()方法,因为它的参数列表和父类不同。

静态方法和final关键字

当父类中的方法是静态方法时,子类不能重写父类的静态方法。另外,父类中的final方法也不能被子类重写。

public class Animal {
    public static void eat() {
        System.out.println("Animal is eating.");
    }

    public final void sleep() {
        System.out.println("Animal is sleeping.");
    }
}

public class Dog extends Animal {
    // This will not compile
    public static void eat() {
        System.out.println("Dog is eating.");
    }

    // This will not compile
    public void sleep() {
        System.out.println("Dog is sleeping.");
    }
}
注意事项

在重写方法时,需要注意以下事项:

  • 重写方法的访问权限不能比父类低(可以更高或相同)
  • 不能抛出比父类方法更多的异常
  • 不能使用比父类方法更严格的访问修饰符
  • 不能使用比父类方法更低的返回类型

在实际开发中,需要根据具体情况来选择是否重写父类方法。如果需要对父类的行为进行修改或扩展,那么重写方法就是一个很好的选择。