Java方法重载是指在同一个类中,允许存在多个同名的方法,只要它们的参数个数或者参数类型不同即可。重载的目的是为了提高代码的复用性,使得一个方法能够接收不同类型或者不同个数的参数,从而实现不同功能。
而Java方法重写是指子类对父类中已有的方法进行覆盖重写(Override),也就是子类有自己特有的实现方式。重写是多态性的一种表现形式,它能够帮助我们更好地使用、扩展已有的代码。
// 重载 public void print(int a) { System.out.println(a); } public void print(String b) { System.out.println(b); } // 重写 class A { public void print() { System.out.println("A"); } } class B extends A { @Override // 注解标识此方法是重写 public void print() { System.out.println("B"); } }
在同一类中具有多个具有相同名称的方法称为方法重载。
类中具有相同名称的方法可以是声明的方法,继承的方法或两者的组合。
重载方法必须具有不同数量的参数,不同类型的参数或两者。
方法的返回类型,访问级别和throws子句对使其成为重载方法没有任何影响。
import java.io.IOException; class MyClass { public void m1(int a) { // Code goes here } public void m1(int a, int b) { // Code goes here } public int m1(String a) { // Code goes here return 0; } public int m1(String a, int b) throws IOException { // Code goes here return 0; } }
下面的代码显示了如何使用重载。
public class Main { public double add(int a, int b) { System.out.println("Inside add(int a, int b)"); double s = a + b; return s; } public double add(double a, double b) { System.out.println("Inside add(double a, double b)"); double s = a + b; return s; } public static void main(String[] args) { Main ot = new Main(); int i = 1; int j = 1; double d1 = 10.42; float f1 = 22.3F; float f2 = 24.5F; short s1 = 22; short s2 = 26; ot.add(i, j); ot.add(d1, j); ot.add(i, s1); ot.add(s1, s2); ot.add(f1, f2); ot.add(f1, s2); } }
上面的代码生成以下结果。
有时,重载方法和自动类型扩展可能会混淆编译器,导致编译器错误。
class Adder { public double add(int a, double b) { return a + b; } public double add(double a, int b) { return a + b; } } public class Main { public static void main(String[] args) { Adder a = new Adder(); // double d = a.add(2, 3); // A compile-time error double d1 = a.add((double) 2, 3); // OK. Will use add(double, int) double d2 = a.add(2, (double) 3); // OK. Will use add(int, double) } }
Java面向对象设计 -Java varargs方法术语“varargs是“可变长度参数的缩写。varargs声明一个接受可变数量的参数(或参数)的方法...
Java面向对象设计 -Java不可变对象在创建状态后无法更改其状态的对象称为不可变对象。一个对象不可变的类称为不可变类。不变的对...
Java面向对象设计 -Java内部类类型您可以在类中的任何位置定义内部类,您可以在其中编写Java语句。有三种类型的内部类。内部类的...
Java面向对象设计 -Java枚举方法因为枚举类型实际上是一个类类型,所以我们可以在枚举类型体中声明一切,我们可以在类体中声明它...
Java数据类型教程 -Java字符串编辑修剪字符串我们可以使用trim()方法从字符串中删除所有前导和尾随空格和控制字符。tri ...