多态在java语法中从下面三个方面体现:
1、向上转型:父类的引用指向一个子类的实例(子类的引用转成了父类的引用)
- 直接赋值
- 方法传参
- 方法返回
2、动态绑定:父类和子类都有同名同参数的方法,此时通过父类引用调用该方法时,就是在运行时决定调用父类版本还是子类版本
3、方法重写:
- 普通方法可以重写,static修饰的静态方法不可以重写
- 子类方法的访问权限不能低于父类方法的访问权限
多态:一个引用能表现出多种不同的形态
- 多态是封装的更进一步,让类的使用者不需要关注具体对象的类型,也能正确使用
- 方便扩展,如果需要新增子类,对于类的使用者来说影响很小
- 消灭一些分支语句,降低程序的圈复杂度
class Shape {
public void draw() {
// 啥都不用干
}
}
class Cycle extends Shape {
//方法重写
@Override
public void draw() {
System.out.println("○");
}
}
public class Rect extends Shape {
//方法重写
@Override
public void draw() {
System.out.println("□");
}
}
class Flower extends Shape {
//方法重写
@Override
public void draw() {
System.out.println("♣");
}
}
/我是分割线//
public class Test {
public static void main(String[] args) {
//向上转型
Shape shape1 = new Flower();
Shape shape2 = new Cycle();
Shape shape3 = new Rect();
drawMap(shape1);
drawMap(shape2);
drawMap(shape3);
}
// 打印单个图形
public static void drawMap(Shape shape) {
//动态绑定
shape.draw();
}
}