• Java面向对象之多态(向上、向下转型) 入门实例


    一、基础概念

      多态

        重点是对象的多态性。某一事物的多种体现形态。

      多态的作用:

        1.提高了代码的扩展性,后期出现的功能,可以被之前的程序所执行。

        2.不能使用子类特有的功能。只能使用覆盖父类的功能。

      多态的前提:

        1.必须要有继承关系或者实现关系。

        2.通常对方法进行重写、覆盖。

        3.父类或者接口要引用指向子类对象。

      多态向上转型:

        1.提高程序的扩展性,隐藏了具体子类型

        2.只能使用父类中的功能,不能使用子类特有的功能。功能被限定了。

      多态向下转型:

        1.可以使用子类型的特有功能。

        2.必须面对具体的子类型。

        3.为了避免运行时出现ClassCastException 问题,需要用关键字instanceof来进行判断。

      注意:

        多态至始至终都是子类对象在做着类型的变化。

    二、代码实例

      1 //父类Animal
      2 abstract class Animal
      3 {
      4     abstract void eat();
      5     abstract void sleep();
      6 }
      7 
      8 //Dog类继承Animal类
      9 class Dog extends Animal
     10 {
     11     /**
     12     将Animal类中的方法重写
     13     */
     14     void eat()
     15     {
     16         System.out.println("dog eat 吃骨头");
     17     }
     18     void sleep()
     19     {
     20         System.out.println("dog sleep .....");
     21     }
     22     
     23     /**
     24     自己特有的方法
     25     */
     26     void say()
     27     {
     28         System.out.println("dog say .....");
     29     }
     30 }
     31 
     32 //Cat类继承Animal类
     33 class Cat extends Animal
     34 {
     35     /**
     36     将Animal类中的方法重写
     37     */
     38     void eat()
     39     {
     40         System.out.println("Cat eat 吃鱼");
     41     }
     42     void sleep()
     43     {
     44         System.out.println("Cat sleep .....");
     45     }
     46 }
     47 
     48 class DuoTaiDemo 
     49 {
     50     //封装Dog类的方法
     51     public static void method(Dog d)
     52     {
     53         d.eat();
     54         d.sleep();
     55         d.say();
     56     }
     57     
     58     //封装Cat类的方法
     59     public static void method(Cat c)
     60     {
     61         c.eat();
     62         c.sleep();
     63     }
     64     
     65     //封装父类Animal的方法
     66     public static void method(Animal s)
     67     {
     68         s.eat();
     69         s.sleep();
     70     }
     71     
     72     public static void main(String[] args) 
     73     {
     74         Dog d1 = new Dog();
     75         method(d1);
     76     
     77         Cat c = new Cat();    
     78         method(c);
     79         
     80         Animal s = new Dog(); //多态性,向上转型,将Dog提升为Animal。
     81         method(s); //只能使用覆盖了父类Animal的eat方法和sleep方法。不能使用Dog类中自己的say方法。
     82         
     83         Animal a = new Cat(); //多态性,向上转型。
     84         method(a);
     85     
     86         /**
     87         向下转型,为了避免运行时出现ClassCastException 问题,
     88         需要用关键字instanceof来进行判断。
     89         */
     90         if( !(s instanceof Dog))
     91         {
     92             System.out.println("类型不匹配");
     93             return ;
     94         }
     95             Dog d2 = (Dog)s;  //多态性,向下转型。
     96             d2.eat();
     97             d2.sleep();
     98             d2.say();
     99     }    
    100 }

    三、运行代码

      

  • 相关阅读:
    按之字形打印二叉树 --剑指offer
    浅谈PHP+Access数据库的连接 注意要点
    Linux下统计代码行数
    获取服务器IP,客户端IP
    CURL访问举例
    廖雪峰博客
    Redis命令
    svn merge和branch 详解
    Linux Screen超简明教程
    MySQL 的Coalesce函数
  • 原文地址:https://www.cnblogs.com/zhuxr/p/8943897.html
Copyright © 2020-2023  润新知