1. 方法重写(Override):
方法重写是指子类重新定义了父类中已有的方法,具有相同的方法名、参数列表和返回类型。在运行时,根据对象的实际类型来调用相应的方法。
class Animal {
void makeSound() {
System.out.println("Animal makes a sound");
}
}
class Dog extends Animal {
@Override
void makeSound() {
System.out.println("Dog barks");
}
}
class Cat extends Animal {
@Override
void makeSound() {
System.out.println("Cat meows");
}
}
使用多态的方式调用:
public class Main {
public static void main(String[] args) {
Animal dog = new Dog();
Animal cat = new Cat();
dog.makeSound(); // 调用的是 Dog 类中的 makeSound 方法
cat.makeSound(); // 调用的是 Cat 类中的 makeSound 方法
}
}
2. 接口实现(Implement):
接口是一种抽象类型,通过实现接口,一个类可以表现出多态的特性。多个类可以实现相同的接口,但提供不同的实现。
interface Shape {
void draw();
}
class Circle implements Shape {
@Override
public void draw() {
System.out.println("Drawing a circle");
}
}
class Square implements Shape {
@Override
public void draw() {
System.out.println("Drawing a square");
}
}
使用多态的方式调用:
public class Main {
public static void main(String[] args) {
Shape circle = new Circle();
Shape square = new Square();
circle.draw(); // 调用的是 Circle 类中的 draw 方法
square.draw(); // 调用的是 Square 类中的 draw 方法
}
}
3. 多态的优势:
- 可替换性: 通过多态,可以用子类对象替换父类对象,而不影响程序的正常运行。
- 可扩展性: 可以轻松地添加新的子类,而不影响已有的代码。
- 接口规范: 多态通过接口规范了对象应该具有的方法,提高了代码的可读性和可维护性。
总的来说,多态使得代码更加灵活、可读性更强,并支持面向对象编程的核心原则之一——抽象。
转载请注明出处:http://www.zyzy.cn/article/detail/426/Java