什么是多态:
自己理解:
同一对象在不同状态表现出的不同形态
Think in java概述:
允许一种类型表现出与和其他相似类型之间的区别,只要他们都是从同一父类导出的
多态的作用:
- 消除类型之间的耦合关系
- 改善代码的组织结构和可读性
- 创建可扩展的程序
多态存在的条件
- 继承
- 方法重写
- 父类引用指向子类引用
向上转型:(父类引用指向子类对象)
class Shape {
public void draw(){
System.out.println("我是Shape");
}
}
class Circle extends Shape{
@Override
public void draw() {
System.out.println("我是Circle");
}
}
public class Square extends Shape{
@Override
public void draw(){
System.out.println("我是Square");
}
public static void main(String[] args) {
//这就是向上转型
Shape circle = new Circle();
Shape square = new Square();
circle.draw();
square.draw();
}
}
向下转型:(父类引用转为子类对象)
//向下转型
Shape shape=new Shape();
Circle circle=(Circle) shape;
绑定:
将一个方法调用同一个方法主体关联起来称作绑定。
前期绑定
在程序执行前进行绑定
动态绑定(后期绑定):
程序运行时根据对象的类型进行绑定
Java中除static final(private方法属于final方法),其他方法都是通过动态绑定来实现多态
多态简单示例
class Shape {
public void draw(){
System.out.println("我是Shape");
}
}
class Circle extends Shape{
@Override
public void draw() {
System.out.println("我是Circle");
}
}
public class Square extends Shape{
@Override
public void draw(){
System.out.println("我是Square");
}
public static void main(String[] args) {
//这就是向上转型
Shape circle = new Circle();
Shape square = new Square();
circle.draw();
square.draw();
}
}
输出:
我是Circle
我是Square