目录
重写
重写的条件
重写的示例
重载(Overload)
重载的条件
重载的示例
区别总结
Java 作为一门面向对象的编程语言,提供了丰富的多态性支持,其中重写(Override)和重载(Overload)是实现多态性的两种基本方式。这两种技术虽然名字相似,但在功能和用途上有着根本的区别。本文将详细介绍重写和重载的定义、规则以及它们在实际开发中的应用。
重写
重写是子类对父类方法的重新实现。当子类继承父类后,如果父类的某个方法不能满足子类的需求,子类可以定义一个与父类相同名称和参数的方法来覆盖父类的方法。
重写的条件
- 方法名和参数列表必须完全相同。
- 返回类型可以是被重写方法的返回类型的子类型(Java 5及以上版本)。
- 访问权限不能比父类中被重写的方法更严格。
- 重写方法可以抛出任何非强制性异常,但不能抛出新的或更广泛的强制性异常。
- 被标记为 final 的方法不能被重写。
重写的示例
class Animal {public void move() {System.out.println("动物可以移动");}
}class Dog extends Animal {@Overridepublic void move() {System.out.println("狗可以跑和走");}
}public class TestDog {public static void main(String[] args) {Animal a = new Animal();Animal b = new Dog();a.move();b.move();}
}
在这个例子中,Dog
类重写了 Animal
类的 move
方法。尽管变量 b
被声明为 Animal
类型,但它实际引用的是 Dog
对象,所以调用的是 Dog
类的 move
方法。
重载(Overload)
重载发生在同一个类中,当两个或多个方法具有相同的名称但参数列表不同时,这些方法就被视为重载。重载使得程序可以定义多个同名的方法,通过输入参数的不同来执行不同的功能。
重载的条件
- 参数列表必须不同(参数数量或类型不同)。
- 被重载的方法可以改变返回类型。
- 被重载的方法可以改变访问权限。
- 被重载的方法可以声明新的或更广泛的检查异常。
重载的示例
public class Overloading {public int test() {System.out.println("test1");return 1;}public void test(int a) {System.out.println("test2");}public String test(int a, String s) {System.out.println("test3");return "returntest3";}public String test(String s, int a) {System.out.println("test4");return "returntest4";}public static void main(String[] args) {Overloading o = new Overloading();System.out.println(o.test());o.test(1);System.out.println(o.test(1, "test3"));System.out.println(o.test("test4", 1));}
}
区别总结
- 参数列表:重载方法必须修改参数列表;重写方法一定不能修改。
- 返回类型:重载方法可以修改返回类型;重写方法返回类型一定不能修改,除非是子类型。
- 异常:重载方法可以修改异常;重写方法可以减少或删除异常,不能抛出新的或更广泛的异常。
- 访问权限:重载方法可以修改访问权限;重写方法不能实施更严格的访问限制。
通过理解和应用重写与重载,Java开发者可以有效地使用多态性,提高程序的灵活性和可维护性。