本人的GitHub:戳我一下
多态,也被称为动态绑定,运行时绑定,后期绑定,我在看马士兵老师的视频时,听他讲到过一句话,我感觉这句话总结了多态的特性,这句话是“父类引用指向子类对象”,多态就是通过父类引用指向子类对象,通过父类的引用,调用子类的方法。
首先先谈谈向上转型和向下转型,我们都知道子类包含父类的所有域和方法,所以一个子类对象可以作为父类的对象使用,通过父类的引用访问子类的方法和域就是向上转型,而向下转型则是把一个父类的引用转换成子类的引用,这是不安全的。向上转型是安全的,因为子类包含了父类,但是向下转型无法确定父类引用指向的对象是子类的对象,因此我们必须确保正确运用向下转型。
下面举个例子说明多态:
class Shape {
public void draw() {
Sysout.println("I am Shape");
}
}
class Circle extends Shape {
public void draw() {
Sysout.println("I am Circle");
}
}
class Square extends Shape {
public void draw() {
Sysout.println("I am Square");
}
}
class Test {
public static void main(String[] args) {
Circle c = new Circle();
Square d = new Square();
Shape e = new Shape();
test(c);//c是Circle类的引用,Circle类是Shape类的子类
test(d);//同上
test(e);
}
public void test(Shape s) {//注意参数是Shape类的引用
s.draw();
}
}
输出:
I am Circle
I am Square
I am Shape
注意:静态方法不具有多态性.