Java是一种面向对象编程语言,其中多态和方法重载是重要的概念。多态让我们可以使用一个父类引用来调用子类方法,而方法重载允许我们在同一类中定义多个同名方法,但是参数列表必须不同。
// 多态 public class Animal { public void eat() { System.out.println("Animal eats.."); } } public class Cat extends Animal { public void eat() { System.out.println("Cat eats fish.."); } } public class Dog extends Animal { public void eat() { System.out.println("Dog eats meat.."); } } public class Main { public static void main(String[] args) { Animal animal1 = new Cat(); Animal animal2 = new Dog(); animal1.eat(); // 输出 Cat eats fish.. animal2.eat(); // 输出 Dog eats meat.. } }
在上面的例子中,我们定义了一个Animal类,以及两个继承自Animal的子类Cat和Dog。在Main类中声明了一个Animal类型的引用变量animal1和animal2。如果我们调用animal1.eat(),由于animal1是一个Cat类型的引用,Java会自动辨别出应该调用Cat类中的eat方法。同样,如果我们调用animal2.eat(),Java会自动辨别出应该调用Dog类中的eat方法。这就是多态的作用。
// 方法重载 public class Overload { public void print(int x) { System.out.println("The int value is " + x); } public void print(double x) { System.out.println("The double value is " + x); } public void print(String x) { System.out.println("The string is " + x); } } public class Main { public static void main(String[] args) { Overload obj = new Overload(); obj.print(10); // 输出 The int value is 10 obj.print(5.5); // 输出 The double value is 5.5 obj.print("Hello World!"); // 输出 The string is Hello World! } }
在上面的例子中,我们定义了一个Overload类,其中包含了三个同名方法print,但是参数列表不同。通过这种方法重载的形式,我们可以简化代码,并且可以重用同名方法的名字。例如:在Java API中,InputStream中的read方法被重载了32次,因为每个方法读入不同的数据类型(字节、字符等等)。当我们需要从不同的数据源读取数据时,我们可以使用同一个read方法,只需改变参数列表即可。