实现多态的多种方式

简介: 【10月更文挑战第19天】这些多态的实现方式各有特点,在不同的场景中可以灵活运用,以提高代码的灵活性、可扩展性和复用性。

除了方法重写,还有以下几种方式可以实现多态:

  1. 接口实现:通过让不同的类实现同一个接口,这些类可以以各自不同的方式来实现接口中的方法,从而体现多态性。每个实现类都可以有其独特的行为表现。
  2. 抽象类继承:一个抽象类可以定义一些抽象方法和具体方法。子类继承这个抽象类后,必须实现其中的抽象方法,同时可以根据需要重写具体方法,实现不同的行为,这也是一种多态的体现。
  3. 方法参数类型的多态性:在方法中接受父类类型的参数,实际传递子类对象。这样,在方法内部可以根据实际对象的类型来执行相应的操作,体现了多态性。
  4. 对象造型:将子类对象转换为父类对象,然后通过父类引用调用方法。运行时会根据实际对象的类型执行相应的方法,实现多态。

以接口实现多态为例,假设有一个接口Shape

public interface Shape {
   
    void draw();
}

然后有两个类CircleSquare分别实现这个接口:

public class Circle implements Shape {
   
    @Override
    public void draw() {
   
        System.out.println("绘制圆形");
    }
}

public class Square implements Shape {
   
    @Override
    public void draw() {
   
        System.out.println("绘制正方形");
    }
}

在使用时,可以创建不同的形状对象,并通过接口引用调用方法:

Shape shape1 = new Circle();
Shape shape2 = new Square();

shape1.draw();
shape2.draw();

在这里,虽然shape1shape2都是Shape类型的引用,但实际执行的是不同类的draw方法,体现了多态性。

抽象类继承的方式也类似。假设有一个抽象类Animal

public abstract class Animal {
   
    public abstract void makeSound();
}

然后有两个子类DogCat继承自它:

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 animal1 = new Dog();
Animal animal2 = new Cat();

animal1.makeSound();
animal2.makeSound();

同样,根据实际对象的类型执行不同的方法。

方法参数类型的多态性可以通过一个方法接受父类类型的参数来实现。比如有一个方法processShape

public void processShape(Shape shape) {
   
    shape.draw();
}

然后可以传递不同的形状对象给这个方法:

processShape(new Circle());
processShape(new Square());

在方法内部,根据实际对象的类型执行相应的操作。

对象造型的方式则是将子类对象转换为父类对象,然后通过父类引用调用方法。比如:

Circle circle = new Circle();
Shape shape = (Shape) circle;

shape.draw();

在这种情况下,运行时会根据实际对象的类型执行相应的方法。

这些多态的实现方式各有特点,在不同的场景中可以灵活运用,以提高代码的灵活性、可扩展性和复用性。

目录
相关文章
|
6月前
|
Java 编译器
动态多态与静态多态
动态多态与静态多态
79 0
|
安全 编译器 C++
C++ 多态深入解析
C++ 多态深入解析
75 0
面向对象设计领域中的参数多态,包含多态,过载多态和强制多态
面向对象设计领域中的参数多态,包含多态,过载多态和强制多态
|
2月前
|
Java 编译器
封装,继承,多态【Java面向对象知识回顾①】
本文回顾了Java面向对象编程的三大特性:封装、继承和多态。封装通过将数据和方法结合在类中并隐藏实现细节来保护对象状态,继承允许新类扩展现有类的功能,而多态则允许对象在不同情况下表现出不同的行为,这些特性共同提高了代码的复用性、扩展性和灵活性。
封装,继承,多态【Java面向对象知识回顾①】
|
6月前
|
存储 安全 编译器
【C/C++ 多态核心 20240115更新】C++虚函数表:让多态成为可能的关键
【C/C++ 多态核心 20240115更新】C++虚函数表:让多态成为可能的关键
47 0
|
6月前
|
编译器 C++
[C++] 面向对象的三大特性:封装、继承和多态
[C++] 面向对象的三大特性:封装、继承和多态
76 0
|
存储 编译器 C++
【C++】多态及原理
【C++】多态及原理
47 0
浅谈 面向对象三大特性:封装 继承 多态
浅谈 面向对象三大特性:封装 继承 多态
88 0
动态绑定,多态(带你从本质了解多态)
动态绑定,多态(带你从本质了解多态)