什么是多态?
多态是指允许不同类的对象对同一消息做出响应。即同一消息可以根据发送对象的不同而采用多种不同的行为方式(发送消息就是函数调用)。继承在为多态的实现做了准备。子类继承父类,我们可以编写一个指向子类的父类类型引用,该引用既可以处理父类对象,也可以处理子类对象,当相同的消息发送给子类或者父类对象时,该对象就会根据自己所属的引用而执行不同的行为,这就是多态。即多态性就是相同的消息使得不同的类做出不同的响应。
Java实现多态有三个必要条件:继承,重写,向上转型。
继承:在多态中必须存在有继承关系的子类和父类。
重写:子类对父类中某些方法进行重新定义,在调用这些方法时就会调用子类的方法。
向上转型:在多态中需要将子类的引用赋给父类对象,只有这样该引用才能够具备技能调用父类的方法和子类的方法。
只有满足了上述三个条件,我们才能够在同一个继承结构中使用同一的逻辑实现代码处理不同的对象,从而达到执行不同的行为。下面结合代码理解。
public class Quadrangle {
// 实例化保存四边形对象的数组对象
private Quadrangle[] qtest = new Quadrangle[6];
private int nextIndex = 0;
public void draw(Quadrangle q) { // 定义draw()方法,参数为四边形对象
if (nextIndex < qtest.length) {
qtest[nextIndex] = q;
System.out.println(nextIndex);
nextIndex++;
}
public static void main(String[] args) {
// 实例化两个四边形对象,用于调用draw()方法
Quadrangle q = new Quadrangle();
q.draw(new Square()); // 以正方形对象为参数调用draw()方法
// 以平行四边形对象为参数调用draw()方法
q.draw(new Parallelogramgle());
}
}
class Square extends Quadrangle { // 定义一个正方形类,继承四边形类
public Square() {
System.out.println("正方形");
}
}
// 定义一个平行四边形类,继承四边形类
class Parallelogramgle extends Quadrangle {
public Parallelogramgle() {
System.out.println("平行四边形");
}
}
输出:
正方形
0
平行四边形
1
从本实例运行的结果可以看出,以不同类对象为参数调用draw()方法可以处理不同的图像类问题,程序员无须在所有的子类中定义执行相同功能的方法,只要实例化一个继承父类的子类对象即可调用相应的方法,只要维护父类中的这个方法即可。
今天的知识就讲到这里,如果觉得有用,欢迎分享给身边的人!