Java面向对象 多态
什么是多态
在面向对象编程中,多态是指同一个方法可以根据对象的不同类型表现出不同的行为。简单来说,多态允许我们用不同的方式去实现同一个方法。
多态的实现
在Java中,多态是通过继承和方法重写来实现的。当一个子类继承了父类并重写了父类的方法时,我们可以用子类的对象来调用这个方法,这样就实现了多态。
实例
假设我们有一个Animal
类作为父类,有一个Dog
类和一个Cat
类作为其子类。Animal
类有一个makeSound
方法,Dog
和Cat
类分别重写了makeSound
方法。
public class Animal {
public void makeSound() {
System.out.println("动物发出了声音");
}
}
public class Dog extends Animal {
@Override
public void makeSound() {
System.out.println("汪汪汪");
}
}
public class Cat extends Animal {
@Override
public void makeSound() {
System.out.println("喵喵喵");
}
}
我们可以创建一个Animal
类型的变量,然后用Dog
和Cat
类的对象来赋值。这样,当调用makeSound
方法时,根据对象的不同类型,将会输出相应的声音。
Animal animal1 = new Dog();
Animal animal2 = new Cat();
animal1.makeSound(); // 输出:汪汪汪
animal2.makeSound(); // 输出:喵喵喵
多态的好处
代码重用
通过多态,我们可以使用父类的引用来引用子类的对象,这就使得代码的重用性大大增加。我们可以在不修改父类的情况下,为不同的子类提供不同的实现。
简化代码
多态让我们能够使用统一的接口来处理不同类型的对象,这样就可以大大简化代码。我们不再需要为每个具体的子类编写特定的代码,只需要对父类进行操作即可。
可扩展性
通过多态,我们可以很方便地扩展代码。当我们需要添加新的子类时,只需要继承父类并重写相应的方法,不需要修改已有的代码。
多态的应用场景
多态在实际的软件开发中有着广泛的应用场景。下面我们来看几个常见的例子。
图形的绘制
假设我们有一个Shape
类作为父类,有一个Circle
类和一个Rectangle
类作为其子类。Shape
类有一个draw
方法,Circle
和Rectangle
类分别重写了draw
方法。
public class Shape {
public void draw() {
System.out.println("绘制了一个形状");
}
}
public class Circle extends Shape {
@Override
public void draw() {
System.out.println("绘制了一个圆形");
}
}
public class Rectangle extends Shape {
@Override
public void draw() {
System.out.println("绘制了一个矩形");
}
}
我们可以创建一个Shape
类型的数组,然后用Circle
和Rectangle
类的对象来赋值。这样,当调用draw
方法时,根据对象的不同类型,将会绘制相应的图形。
Shape[] shapes = new Shape[2];
shapes[0] = new Circle();
shapes[1] = new Rectangle();
for (Shape shape : shapes) {
shape.draw();
}
输出结果为:
绘制了一个圆形
绘制了一个矩形
消息通知
假设我们有一个Notification
类作为父类,有一个EmailNotification
类和一个SMSNotification
类作为其子类。Notification
类有一个send
方法,EmailNotification
和SMSNotification
类分别重写了send
方法。
public class Notification {
public void send() {
System.out.println("发送了一条通知");
}
}
public class EmailNotification extends Notification {
@Override
public void send() {