Java方法重写是指子类重写父类中的方法,它是多态的一种表现形式。在Java中,只有子类可以重写父类的方法,而且必须保证子类重写的方法与被重写的方法具有相同的名字、参数列表和返回值。
public class Animal { public void move() { System.out.println("动物可以移动"); } } public class Dog extends Animal { @Override public void move() { System.out.println("狗可以跑和走"); } public void bark() { System.out.println("狗可以吠叫"); } }
上面代码中,Animal 类定义了一个 move 方法;Dog 类是 Animal 的子类,它重写了 Animal 的 move 方法;Dog 还定义了一个 bark 方法。当我们创建 Dog 对象并调用 move 方法时,将会执行 Dog 类中重写的 move 方法。
重新定义从超类继承的类中的实例方法称为方法重写。
让我们考虑类A和类B的以下声明:
public class A { public void print() { System.out.println("A"); } } public class B extends A { public void print() { System.out.println("B"); } }
类B是类A的子类。类B从其超类继承print()方法并重新定义它。
类B中的print()方法覆盖类A的print()方法。
如果一个类覆盖了一个方法,它会影响覆盖的类及其子类。考虑下面的类C的声明:
public class C extends B { // Inherits B.print() }
类C不声明任何方法。它继承类B中的print()方法。
类总是继承它的直接超类的可用的。
方法必须是实例方法。重写不适用于静态方法。
重写方法必须具有与重写方法相同的名称。
重写方法必须具有与重写方法相同顺序的相同类型的相同数量的参数。
当方法的参数使用通用类型时,考虑通用类型参数的擦除,而不是通用类型本身与其他方法比较。
参数的名称无关紧要。
如果重写方法的返回类型是引用类型,则重写方法的返回类型必须与重写方法的返回类型兼容。
重写方法的访问级别必须至少与重写方法的访问级别相同或更宽松。
下表列出了重写方法允许的访问级别
重写方法访问级别 | 允许重写方法访问级别... |
---|---|
public | public |
protected | public, protected |
package-level | public, protected, package-level |
方法可以在其throws子句中包括检查异常的列表。重写方法无法向重写方法中的异常列表添加新的异常。
它可以删除一个或所有异常,或者可以用另一个异常替换异常。
从子类访问重写的方法。子类可以使用关键字 super
作为限定符来调用超类的重写方法。
class MySuperClass { public void print() { System.out.println("Inside MySuperClass"); } } class MySubClass extends MySuperClass { public void print() { // Call print() method of MySuperClass class super.print(); // Print a message System.out.println("Inside MySubClass.print()"); } public void callOverridenPrint() { // Call print() method of MySuperClass class super.print(); } } public class Main { public static void main(String[] args) { MySubClass aoSub = new MySubClass(); aoSub.print(); aoSub.callOverridenPrint(); } }
上面的代码生成以下结果。
Java面向对象设计 -Java枚举比较您可以通过三种方式比较两个枚举常量:使用Enum类的compareTo()方法使用Enum类的equals()方法使...
JavaFX教程 -JavaFX FlowPaneFlowPane根据可用的水平间距布置一行中的节点当水平空间小于所有节点“宽度"的总和时,将节点包裹到...
Java 实例 - 向文件中追加数据 Java 实例以下实例演示了使用 filewriter 方法向文件中追加数据:import java.io.*;public class ...
Java 实例 - 获取异常的堆栈信息 Java 实例以下实例演示了使用异常类的 printStack() 方法来获取堆栈信息:public class Main{ p...
Java toString() 方法JavaString类toString() 方法返回此对象本身(它已经是一个字符串)。语法public String toString()参数 无...