黑马程序员技术交流社区

标题: 多态的好处和弊端 [打印本页]

作者: Kingchen    时间: 2016-5-29 22:31
标题: 多态的好处和弊端
* A:多态的好处
        * a:提高了代码的维护性(继承保证)
        * b:提高了代码的扩展性(由多态保证)
* B:案例演示
        * 多态的好处
        * 可以当作形式参数,可以接收任意子类对象
* C:多态的弊端
        * 不能使用子类的特有属性和行为。
* D:案例演示
  1. class Demo_Animal {
  2.         public static void main(String[] args) {
  3.                 //Cat c1 = new Cat();
  4.                 //c1.eat();
  5.                 method(new Cat());
  6.                 method(new Dog());
  7.                 //Animal a = new Cat();                        开发的是很少在创建对象的时候用父类引用指向子类对象,直接创建子类对象更方便,可以使用子类中的特有属性和行为
  8.         }
  9.        
  10.         //Cat c = new Dog();狗是一只猫,这是错误的
  11.         /*public static void method(Cat c) {                       
  12.                 c.eat();
  13.         }
  14.         public static void method(Dog d) {
  15.                 d.eat();
  16.         }*/
  17.        
  18.         //如果把狗强转成猫就会出现类型转换异常,ClassCastException
  19.         public static void method(Animal a) {        //当作参数的时候用多态最好,因为扩展性强
  20.                 //关键字 instanceof 判断前边的引用是否是后边的数据类型
  21.                 if (a instanceof Cat) {
  22.                         Cat c = (Cat)a;
  23.                         c.eat();
  24.                         c.catchMouse();
  25.                 }else if (a instanceof Dog) {
  26.                         Dog d = (Dog)a;
  27.                         d.eat();
  28.                         d.lookHome();
  29.                 }else {
  30.                         a.eat();
  31.                 }
  32.         }
  33. }
  34. class Animal {
  35.         public void eat() {
  36.                 System.out.println("动物吃饭");
  37.         }
  38. }
  39. class Cat extends Animal {
  40.         public void eat() {
  41.                 System.out.println("猫吃鱼");
  42.         }
  43.         public void catchMouse() {
  44.                 System.out.println("抓老鼠");
  45.         }
  46. }
  47. class Dog extends Animal {
  48.         public void eat() {
  49.                 System.out.println("狗吃肉");
  50.         }
  51.         public void lookHome() {
  52.                 System.out.println("看家");
  53.         }
  54. }
复制代码




作者: hero_king    时间: 2016-5-29 22:34
写的很全面,还有代码中标注了一些注意的点挺好




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2