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

来源:互联网 发布:apm测试软件 编辑:程序博客网 时间:2024/05/19 10:41

------- android培训、java培训、期待与您交流! ----------

JAVA多态

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

一、多态的提现:

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 在多态中,静态成员函数的特点

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

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

弊端:通过多态的特点我们发现 多态提高了扩展性,但是只能使用父类引用访问父类中(存在)的成员

原创粉丝点击