父类:
public class A{
public void a(){
System.out.println(“a”);
}
}
子类1:
public class A1 extends A{
public void a(){
System.out.println(“a1”);
}
}
子类2:
public class A2 extends A{
public void a(){
System.out.println(“a2”);
}
}
测试类如下:
public class Test{
public static void main(String[] args){
A a = new A();
A a1 = new A1();
A a2 = new A2();
a.a();
a1.a();
a2.a();
}
}
毫无疑问,结果如下:
a
a1
a2
为啥它能够正确地调用a()方法呢,因为多态、动态绑定。
这也就是说,当你有一个基类,比如说形状类Shape,然后其有一个方法getDesc()获得其描述。Shape的子类Circle,Triangle,各自重载其父类的getDesc()方法,Circle的getDesc()返回“我是圆形”,Triangle的getDesc()返回“我是三角形”。然后某一个类的某一个方法如下:
String test(Shape shape){
return shape.getDesc();
}
你在调用test()方法时可里往里面传的参数类型可以是Shape、Circle或Triangle,多态能够保证getDesc()方法被正确调用,这叫动态绑定,从而你不用写三个如下的方法,即test(Shape s),test(Circle c),test(Triangle t)。
从上面的代码看出,要实现多态,要有以下几个条件:存在继承(父类、子类A、子类B、子类C),以及子类A、子类B、子类C对父类方法的不同重载
然后怎么用呢?
我的理解是:引用对象用父类,实例对象可以是子类A、子类B、子类C中的任意一个,等到具体对引用对象进行操作的时候,(如此处代码中的shape.getDesc()),系统会根据实例对象,智能地执行相应子类的代码!!