目录
前言:
多态是Java中一个非常重要的概念,它允许不同类的对象对同一个消息做出不同的响应。在Java中,多态性主要通过继承和接口实现来实现。下面我们来深入分析Java中多态的实现和应用。1. 继承和多态
实现多态的方式:
- 继承:子类可以重写父类的方法,实现不同的行为。
- 接口:不同的类可以实现相同的接口,但具体的实现可以不同。
- 方法重载:同一个类中可以有多个方法,它们具有相同的名称但参数列表不同,编译器根据参数列表的不同来选择调用哪个方法。
多态的应用:
- 简化代码:通过多态,可以使用统一的接口来处理不同类的对象,简化代码的逻辑。
- 扩展性:当需要增加新的类时,不需要修改现有的代码,只需要保证新的类符合现有的接口或继承关系即可。
- 面向接口编程:多态可以通过接口来实现,提高代码的灵活性和可维护性。
- 设计模式:多态是许多设计模式的基础,如工厂模式、策略模式等,它们都依赖于多态来实现不同的行为。
1.继承和多态
在Java中,继承是实现多态的一种重要手段。当一个子类继承自父类时,它可以重写父类的方法,并且可以通过父类的引用指向子类的实例。这样就可以在运行时根据实际的对象类型来调用对应的方法,实现多态的效果。
例子:
class Animal {
public void makeSound() {
System.out.println("Animal makes sound");
}
}
class Dog extends Animal {
@Override
public void makeSound() {
System.out.println("Dog barks");
}
}
class Cat extends Animal {
@Override
public 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 barks
cat.makeSound(); // 输出:Cat meows
}
}
在上面的例子中,Animal类是父类,Dog和Cat类是它的子类,它们都重写了父类的makeSound方法。在main方法中,我们通过Animal类的引用分别指向Dog和Cat的实例,然后调用makeSound方法,根据实际的对象类型来执行对应的方法。
2. 接口和多态
除了继承,Java中的接口也是实现多态的重要手段。一个类可以实现多个接口,并且可以通过接口的引用指向实现了该接口的类的实例,从而实现多态的效果。
例子:
interface Shape {
void draw();
}
class Circle implements Shape {
@Override
public void draw() {
System.out.println("Circle is drawn");
}
}
class Rectangle implements Shape {
@Override
public void draw() {
System.out.println("Rectangle is drawn");
}
}
public class Main {
public static void main(String[] args) {
Shape circle = new Circle();
Shape rectangle = new Rectangle();
circle.draw(); // 输出:Circle is drawn
rectangle.draw(); // 输出:Rectangle is drawn
}
}
在上面的例子中,Shape是一个接口,Circle和Rectangle类都实现了Shape接口。在main方法中,我们通过Shape接口的引用分别指向Circle和Rectangle的实例,然后调用draw方法,根据实际的对象类型来执行对应的方法。
总结:
多态是Java中一个非常重要的概念,它通过继承和接口实现来实现。通过多态,我们可以编写出更加灵活、可扩展的代码,提高代码的复用性和可维护性。同时,多态也是面向对象编程中的一个核心思想,对于理解和使用Java语言来说至关重要。
注意点:
多态的优点:可以使ArraryList不用加上存入数据类型,此时类型为Object(父类之父),意味着任意类型都能存入
多态的弊端:不能调用子类特有的功能
解决方案:变回子类类型就可以(数据类型可以强转的方式相同)不能瞎转,从创建对象时的类型判断