java中的多态

来源:互联网 发布:mac如何输入大写字母 编辑:程序博客网 时间:2024/06/06 14:23

一、如何理解多态

一个对象有多种状态,可以作为它自己本身的类型使用,也可以作为它的基类类型使用。

三个要素:(1) 要有继承

  (2) 向上转型:接口定义中参数是基类型,调用时传具体的子类型

  (3) 后期绑定(运行时绑定)


二、举例

import java.util.*;class Shape {public void draw() {}}class Circle extends Shape {public void draw() {System.out.println("draw-Circle");}}class Square extends Shape {public void draw() {System.out.println("draw-Square");}}class Triangle extends Shape {public void draw() {System.out.println("draw-Triangle");}}class MakeShape {public static void drawShape(Shape shape) {shape.draw();}}class RandomShape {private Random rand = new Random(47);public Shape getShape() {switch(rand.nextInt(3)) {default:case 0: return new Circle();case 1: return new Square();case 2: return new Triangle();}}}public class Test {public static void main(String[] args) {// TODO Auto-generated method stubRandomShape gen = new RandomShape();for (int i = 0; i < 5; i++) {MakeShape.drawShape(gen.getShape());}}}

三、若不使用多态

class MakeShape {public static void drawShape(Circle circle) {circle.draw();}
<span style="white-space:pre"></span>public static void drawShape(Square square) {square.draw();}
</pre><pre name="code" class="java" style="font-size: 18px;">     public static void drawShape(Triangle triangle) {triangle.draw();}

}

若是再添加新几何形时,如六边形,梯形,那么MakeShape中还要做相应的判断,这就违背了开放封闭原则。

0 0
原创粉丝点击