A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

* A:多态的好处
        * a:提高了代码的维护性(继承保证)
        * b:提高了代码的扩展性(由多态保证)
* B:案例演示
        * 多态的好处
        * 可以当作形式参数,可以接收任意子类对象
* C:多态的弊端
        * 不能使用子类的特有属性和行为。
* D:案例演示
案例:
  • class Demo4_Animal {
  •         public static void main(String[] args) {
  •                 //Cat c1 = new Cat();
  •                 //c1.eat();
  •                 method(new Cat());
  •                 method(new Dog());
  •                 //Animal a = new Cat();                        开发的是很少在创建对象的时候用父类引用指向子类对象,直接创建子类对象更方便,可以使用子类中的特有属性和行为
  •         }
  •        
  •         //Cat c = new Dog();狗是一只猫,这是错误的
  •         /*public static void method(Cat c) {                       
  •                 c.eat();
  •         }
  •         public static void method(Dog d) {
  •                 d.eat();
  •         }*/
  •        
  •         //如果把狗强转成猫就会出现类型转换异常,ClassCastException
  •         public static void method(Animal a) {        //当作参数的时候用多态最好,因为扩展性强
  •                 //关键字 instanceof 判断前边的引用是否是后边的数据类型
  •                 if (a instanceof Cat) {
  •                         Cat c = (Cat)a;
  •                         c.eat();
  •                         c.catchMouse();
  •                 }else if (a instanceof Dog) {
  •                         Dog d = (Dog)a;
  •                         d.eat();
  •                         d.lookHome();
  •                 }else {
  •                         a.eat();
  •                 }
  •         }
  • }
  • class Animal {
  •         public void eat() {
  •                 System.out.println("动物吃饭");
  •         }
  • }
  • class Cat extends Animal {
  •         public void eat() {
  •                 System.out.println("猫吃鱼");
  •         }
  •         public void catchMouse() {
  •                 System.out.println("抓老鼠");
  •         }
  • }
  • class Dog extends Animal {
  •         public void eat() {
  •                 System.out.println("狗吃肉");
  •         }
  •         public void lookHome() {
  •                 System.out.println("看家");
  •         }
  • }




0 个回复

您需要登录后才可以回帖 登录 | 加入黑马