很简单,比如说 B类继承了A类,那么A类就是B类的父类。
通过 A a = new B();产生的对象就是多态的体现.
在a调用成员变量时,编译和运行时都参考引用类型变量所属的类中是否有这个成员变量。
在a调用成员方法时,编译时参考引用类型变量所属的类中是否有这个成员方法,如果有编译就通过;在运行时参考引用类型变量指向的对象中是否有这个成员方法,如果有就直接运行,如果没有就去引用类型变量所属的类中去找这个成员方法,如果有就直接运行,如果没有就报错。
而调用静态成员方法时不管编译和运行都参考引用类型的变量所属的类中是否有这个静态方法,有就运行,没有就报错。其实调用静态成员方法直接类名调用就行了,多态对静态成员方法和静态成员变量几乎没什么影响。我目前也就学这么多,希望对你有帮助。
假设有一个类 叫 鸟类,它拥有属性翅膀,拥有方法鸣叫,如下
public class Bird{
private Wing wing;
public void moo(){
System.out.println("鸟叫声");
}
}
鸟类封装了 翅膀类和moo方法;另外有两个类都继承鸟类并重写了moo方法,分别是鹦鹉和麻雀如下:
鹦鹉类:
public class Parrot extends Bird{
public void moo(){
System.out.println("鹦鹉的叫声");
}
}
麻雀类:
public class Sparrow extends Bird{
public void moo(){
System.out.println("麻雀的叫声");
}
}
方法重写应该懂吧,不懂自己找书看吧;然后你有个妻子她想听鸟叫,就有个妻子类
public class Wife{
public void listen(Bird bird){
bird.moo();
}
/*这时多态就很好的体现了,你妻子想听鸟叫,无论什么鸟都可以给她,但是你想让她和鹦鹉
*说话,你就买了一只鹦鹉传给listen方法,结果你妻子听到了鹦鹉的叫声,程序输出:鹦
*鹉的叫声
*/
public static void main(String[] args) {
new Wife().listen(new Parrot());
}
}
多态实现了动态绑定,让程序有了很好的扩展性,比如你以后想买一只燕子送给你妻子,就只需要写个燕子类Swallow继承Bird方法就可以了,而不需要再在妻子类里添加一个方法listen(Swallow swallow)……上面编码没用编译器,可能有错误,请谅解