图形绘制系统
- 背景:在图形绘制系统中,有多种不同类型的图形,如圆形、矩形、三角形等。这些图形都有一些共同的操作,如计算面积、绘制图形等,但每种图形的具体实现方式不同。
- 多态性的应用:可以定义一个抽象类
Shape
,其中包含抽象方法calculateArea()
和draw()
。然后,不同的图形类(如Circle
、Rectangle
、Triangle
)继承自Shape
并实现这些抽象方法。 - 例如,
Circle
类可能这样实现:class Circle extends Shape { private double radius; public Circle(double radius) { this.radius = radius; } @Override public double calculateArea() { return Math.PI * radius * radius; } @Override public void draw() { // 绘制圆形的具体代码 System.out.println("Drawing a circle with radius " + radius); } }
- 当需要绘制一组不同形状的图形或者计算它们的面积时,可以使用多态性。例如,有一个
Shape
类型的数组,其中可以存储不同类型的图形对象:Shape[] shapes = new Shape[3]; shapes[0] = new Circle(2.0); shapes[1] = new Rectangle(3.0, 4.0); shapes[2] = new Triangle(3.0, 4.0); for (Shape shape : shapes) { System.out.println("Area: " + shape.calculateArea()); shape.draw(); }
- 在这个循环中,通过
Shape
类型的引用变量shape
来调用calculateArea()
和draw()
方法。由于多态性,Java会根据数组中每个元素实际的对象类型(Circle
、Rectangle
或Triangle
)来调用相应类中实现的方法,这样就可以用统一的方式处理不同类型的图形。
动物行为模拟
- 背景:在动物行为模拟程序中,有多种动物,每种动物都有自己的行为,如发出声音、移动方式等。
- 多态性的应用:定义一个抽象类
Animal
,其中包含抽象方法makeSound()
和move()
。不同的动物类(如Dog
、Cat
、Bird
)继承自Animal
并实现这些抽象方法。 - 例如,
Dog
类的实现可能如下:class Dog extends Animal { @Override public void makeSound() { System.out.println("Woof!"); } @Override public void move() { System.out.println("Running on four legs."); } }
- 可以创建一个动物的集合,然后遍历这个集合来模拟动物的行为:
List<Animal> animals = new ArrayList<>(); animals.add(new Dog()); animals.add(new Cat()); animals.add(new Bird()); for (Animal animal : animals) { animal.makeSound(); animal.move(); }
- 同样,由于多态性,在循环中通过
Animal
类型的引用变量animal
调用makeSound()
和move()
方法时,会根据集合中每个元素实际的动物类型来调用相应类中实现的方法,从而模拟出不同动物的行为。
数据库访问层设计
- 背景:在一个应用程序中,可能需要连接不同类型的数据库(如MySQL、Oracle等),每种数据库的访问方式(如SQL语法、连接方式等)略有不同,但都有一些基本的操作,如查询数据、插入数据等。
- 多态性的应用:可以定义一个抽象类
DatabaseAccessor
,其中包含抽象方法query()
和insert()
等。然后,针对不同的数据库,创建相应的子类(如MySQLAccessor
、OracleAccessor
)并实现这些抽象方法。 - 例如,
MySQLAccessor
类可能在query()
方法中使用MySQL特有的SQL语法和连接方式来执行查询操作。在应用程序的业务逻辑层,可以使用DatabaseAccessor
类型的引用变量来调用数据库访问方法,而不关心具体是哪种数据库。例如:DatabaseAccessor accessor; if (useMySQL) { accessor = new MySQLAccessor(); } else { accessor = new OracleAccessor(); } ResultSet result = accessor.query("SELECT * FROM users");
- 这样,通过多态性,可以方便地切换数据库访问的具体实现,而不需要修改业务逻辑层的大量代码,提高了代码的可维护性和可扩展性。