Java多态:方法重写与覆盖实例分析
Java中的多态性是面向对象编程的一个核心概念,它允许我们以统一的方式处理不同类型的对象。在Java中,多态性主要通过方法重写(Override)和方法覆盖(Overload)来实现。
方法重写(Override)
方法重写是指子类中有一个方法与其父类中的某个方法具有相同的方法名、返回类型和参数列表。子类通过重写父类的方法来提供特定的实现。
重写规则:
- 方法名、参数列表必须与被重写的方法相同。
- 返回类型应该与被重写的方法相同或是其子类型(协变返回类型)。
3.访问权限不能比被重写的方法更严格。 - 不能重写父类中声明为
final
的方法。
5.子类方法不能抛出新的检查异常或比被重写方法声明的更广泛的检查异常。
实例分析:
```javaclass Animal {
public void makeSound() {
System.out.println(“Some sound”);
}
}
class Dog extends Animal {
@Override public void makeSound() {
System.out.println(“Bark”);
}
}
public class TestPolymorphism {
public static void main(String[] args) {
Animal myAnimal = new Dog();
myAnimal.makeSound(); // 输出 “Bark”
}
}``在这个例子中,
Dog类重写了
Animal类的
makeSound方法。当我们创建
Dog类的实例并将其赋值给
Animal类型的引用时,调用
makeSound`方法将输出”Bark”,展示了多态性。
方法覆盖(Overload)
方法覆盖是指在一个类中可以有多个同名方法,但这些方法的参数列表必须不同(参数的数量、类型或顺序至少有一个不同)。
覆盖规则:
- 方法名必须相同。
- 参数列表必须不同。
- 返回类型可以相同也可以不同。
4.访问权限可以不同。
实例分析:
```javaclass Calculator {
public int add(int a, int b) {
return a + b;
}
public double add(double a, double b) {
return a + b;
}
}
public class TestOverloading {
public static void main(String[] args) {
Calculator calc = new Calculator();
System.out.println(calc.add(5,3)); // 输出8 System.out.println(calc.add(5.5,3.3)); // 输出8.8 }
}``在这个例子中,
Calculator类有两个
add方法,它们通过参数列表的不同来区分。第一个
add方法接受两个
int类型的参数,而第二个接受两个
double`类型的参数。这允许我们使用相同的方法名来执行不同类型的加法运算。
总结来说,方法重写是多态性的一种表现,它允许子类提供父类方法的具体实现;而方法覆盖则提供了一种方式,使得同一个类中可以有多个同名方法,但这些方法必须有不同的参数列表。这两种机制都是Java中实现多态性的重要手段。
还没有评论,来说两句吧...