---------------------- <a href="http://edu.csdn.net"target="blank">ASP.Net+Android+IO开发S</a>、<a href="http://edu.csdn.net"target="blank">.Net培训</a>、期待与您交流! ----------------------

 

3.11 多态

   1、多态的体现:父类的引用指向了自己的子类对象,

   2、好处:大大提高程序的扩展性

   3、前提:必须有关系:继承,接口.必须存在覆盖

   4、弊端:虽提高了扩展性,但是只能使用父类的引用访问父类中的成员

   5、多态的应用:

   6、多态时,成员的特点

      1)、成员函数:在编译时,参阅引用型变量中所属的类中的是否有调用的成员变量,有,编译通过,否则,失败。在运行时,参阅对象所属的类中是否有调用的方法

简单总结:成员函数在多态调用时,编译看左边,运行看右边

    以下注意面试题

      2)、成员变量:无论编译,还是运行都参考引用型变量中所属的类中的是否有调用的成员变量,有,编译通过,否则,失败。即左边

      3)、静态函数:从某种意义上讲,不涉及多态。

  7、代码示例:

abstract class Animal{abstract void eat();}class Cat extends Animal{void catchMouse(){System.out.println("抓老鼠");}void eat() {System.out.println("吃鱼");}}class Dog extends Animal{void watchHome(){System.out.println("看家");}void eat() {System.out.println("吃骨头");}}class Pig extends Animal{void watchHome(){System.out.println("看家");}void eat() {System.out.println("饲料");}}public class AboutPolymorphic {public static void main(String[] args) {/* Cat c = new Cat();c.eat();Dog d = new Dog();d.eat();Pig p = new Pig();//为了提高以上代码的复用性,于是将eat功能提取出来写成function函数function(c);function(d);function(p);//可是当我们要扩展功能,比如加个pig,这样的话有得写function功能,可是function函数都一样,为了提高代码的复用性*///一个事物的多种存在形态// Animal a = new Cat(); //类型提升,向上转型//c.eat();//Cat c = (Cat)a;//如果想要调用猫的特有方法,强制将父类的引用,转换成子类类型,即向下转型/*注意:①千万不要出现这样的操作,就是将父类对象转换子类类型。②我们能转换的是父类应用指向了自己的子类对象时,该应用可以被提升,也可以被强制转换。③多态自始至终都是子类对象在做着变化*///c.catchMouse();function(new Cat());function(new Dog());function(new Pig());}public static void function(Animal a){a.eat();if(a instanceof Cat){//类型判断:instanceof//作用:用于判断对象的具体类型,只能用于引用数据类型判断,以及在向下转型前用于健壮性的判断Cat c = (Cat)a;c.catchMouse();}else if(a instanceof Dog){Dog d = (Dog)a;d.watchHome();}}/*public static void function(Cat c){c.eat();}public static void function(Dog d){d.eat();}public static void function(Pig p){p.eat();}*/}

 

---------------------- <a href="http://edu.csdn.net"target="blank">ASP.Net+Android+IOS开发</a>、<a href="http://edu.csdn.net"target="blank">.Net培训</a>、期待与您交流! ---------------------- 

详细请查看:<ahref="http://edu.csdn.net" target="blank"></a>