在Java函数中使用多态性的示例
多态性是面向对象编程的一种重要概念,它使得不同的对象可以使用同一个接口进行交互。在Java中,多态性的实现有两种方式:继承和接口。在这篇文章中,我将通过一些示例来展示如何在Java函数中使用多态性。
示例1:使用继承实现多态性
首先,我们定义一个形状抽象类Shape,该类有一个area()方法,计算形状面积。
abstract class Shape {
abstract double area();
}
然后,我们定义两个子类Rectangle和Circle,分别表示矩形和圆形,这两个子类都重写了父类的area()方法。
class Rectangle extends Shape {
private double length;
private double width;
Rectangle(double length, double width) {
this.length = length;
this.width = width;
}
@Override
double area() {
return length * width;
}
}
class Circle extends Shape {
private double radius;
Circle(double radius) {
this.radius = radius;
}
@Override
double area() {
return Math.PI * radius * radius;
}
}
接下来,我们定义一个函数printArea(),该函数可以接受任意形状对象作为参数,并输出其面积。
void printArea(Shape s) {
System.out.println("Area of the shape is: " + s.area());
}
最后,我们编写一个测试函数,分别实例化一个矩形和一个圆形对象,并分别调用printArea()函数输出它们的面积。
public static void main(String[] args) {
Rectangle r = new Rectangle(5, 10);
Circle c = new Circle(5);
printArea(r);
printArea(c);
}
运行程序,输出结果如下:
Area of the shape is: 50.0 Area of the shape is: 78.53981633974483
这个例子中,我们通过继承实现了多态性。printArea()函数可以接受任意Shape对象作为参数,而不需要知道具体是哪种形状。在运行时,根据实际参数的类型来调用相应的area()方法。
示例2:使用接口实现多态性
除了继承,Java还提供了接口来实现多态性。下面我们通过一个例子来演示如何使用接口实现多态性。
首先,我们定义一个接口Drawable,该接口有一个draw()方法,表示绘制图形。
interface Drawable {
void draw();
}
然后,我们定义两个类Rectangle和Circle,它们都实现了Drawable接口,并重写了draw()方法。
class Rectangle implements Drawable {
private double length;
private double width;
Rectangle(double length, double width) {
this.length = length;
this.width = width;
}
@Override
public void draw() {
System.out.println("Drawing a rectangle...");
}
}
class Circle implements Drawable {
private double radius;
Circle(double radius) {
this.radius = radius;
}
@Override
public void draw() {
System.out.println("Drawing a circle...");
}
}
接下来,我们定义一个函数drawAll(),该函数可以接受一个Drawable数组作为参数,并依次调用每个元素的draw()方法。
void drawAll(Drawable[] shapes) {
for (Drawable s : shapes) {
s.draw();
}
}
最后,我们编写一个测试函数,分别实例化一个矩形和一个圆形对象,并将它们放入一个Drawable数组中。然后,调用drawAll()函数,输出它们的图形。
public static void main(String[] args) {
Drawable[] shapes = new Drawable[] {
new Rectangle(5, 10),
new Circle(5)
};
drawAll(shapes);
}
运行程序,输出结果如下:
Drawing a rectangle... Drawing a circle...
这个例子中,我们通过实现接口的方式实现了多态性。drawAll()函数可以接受任何实现了Drawable接口的对象作为参数,而不需要知道具体是哪种图形。在运行时,根据实际参数的类型来调用相应的draw()方法。
总结
多态性是面向对象编程的一种重要概念,它使得不同的对象可以使用同一个接口进行交互。在Java中,多态性的实现有两种方式:继承和接口。通过实现多态性,我们可以编写出更加灵活、可复用的代码。如果你想要深入了解Java多态性的实现原理,可以查阅Java语言规范中关于多态性的章节。
