您的位置:首页 > 职场人生

黑马程序员-java多态学习笔记

2013-01-03 21:32 651 查看
------- android培训java培训、期待与您交流! ----------
J***A多态

多态:可以理解为事务存在的多种体现形态

一、多态的提现:

l 父类的引用指向了自己的子类对象

l 父类的引用也可以接受自己的子类对象

例如

Class Animal{  

            public void  eat()

                {

                 System.out.println(“吃东西”);

                 }

           }

Class Cat extends Animal

{

      Public void catchMouse()

      {

       System.out.println(“抓老鼠”);

      }

 }

Class Dog extends Animal

{

      Public void kanjia()

      {

       System.out.println(“看家”);

      }

 }

Class Demo

{

   Public static void main(String[]args)

   {

     Animal c=new Cat();

     c.eat();//父类引用指向子类对象  并且 调用子类eat()功能

     Cat b=(Cat)c;

     b.catchMouse();//如果想用c调用子类独有的功能则必须 将c强行转换成b

     function(new Cat());//父类引用接受子类对象 

     

     }

    Public static void function(Animal a)

    {

     a.eat();

    }

/*

    Public static  void function1(Cat a)

    {

    C.eat();

    }

    Public static  void function2(Dog d)

    {

    d.eat();

    }

/*很明显 有了function function1和function2都可以省了*/

}




二、多态的前提

必须是类与类之间有关系,或者继承或者实现。通常还会有一个前提:存在覆盖

三、多态的好处

多态的出现大大提高了程序的扩展性

举例说明:电脑运行基于主板,主板上面有声卡,显卡,网卡等等

Interface PCI//PCI接口  

{

  Public void oper();

  Pulblic void close();

}

Class Main Board

{

    Public void run()

   {

    System.out.print(“mainboard run”);

   }

   Public void usePCI(PCI p)//将这个接口 安装到主板上

   {

   P.oper();

   P.close();

   }

}

//所有要插在主板上运行的程序都要实现这个接口

Class NetCard implemets PCI

{

     Public void open()

     {

       System.out.println(“netcard oper”);

     }

     Public void close()

     {

      Sysetem.out.println(“netcard close”);

     }

}

Class SoundCard implemets PCI

{

      

     Public void open()

     {

       System.out.println(“SoundCard oper”);

     }

     Public void close()

     {

      Sysetem.out.println(“SoundCard close”);

     }

}

Class Demo

{ 

     Public static void main(String[]args)

     {

       Mainboard mb=new MainBoad();

       Mb.run();

       mb.usePCI(new  NetCard());

       mb usePCI(new   SoundCard ());

     }

}




有了PCI这个接口 无论以后要在主板上加上个什么卡 都可以很容易



在现实生活中接口可以看做是 插座 所有要用电的机器都需要创建一个插头 即:实现

这个接口 就可以运行起来 当然没有插头的电器也可以运行起来 不过很麻烦

四、多态的特点及弊端

l 在多态中成员函数的特点

在编译时期:参阅引用型变量所属的类中是否有调用的方法,如果有,编译通过,如果没有编译报错

在运行时期:参阅对象所属的类中是否有调用的方法

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

l 在多态中,成员变量的特点:

无论编译和运行,都参考左边 即引用类型所属的类

l 在多态中,静态成员函数的特点

静态函数在继承中没有覆盖的情况

无论编译和运行,都参考左边

弊端:通过多态的特点我们发现 多态提高了扩展性,但是只能使用父类引用访问父类中(存在)的成员
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: