黑马程序员----多态

来源:互联网 发布:php工程师工资低 编辑:程序博客网 时间:2024/06/03 14:25

---------------------- ASP.Net+Unity开发、.Net培训、期待与您交流! ----------------------

定义:
    多态:事物存在的多种体现形态

多态的体现:
       在对象上的体现:父类的引用指向了自己的子类
                猫 m=new 猫();
                动物 m=new 猫();
       在方法上的体现:
                方法的复写和重写
多态的意义

            1、定义一些事物的共同特性,通过继承同一个父类
            2、提高代码扩展性,因为可以用父类来代替子类接收实参

多态的弊端

            1、父类的方法会丢失
            2、父类引用只能访问父类中有的方法,但是访问的是子类中的方法(原因:在编译时参阅的是父类引用是否有该方法,但是运行时则参阅的是具体实例子类),但是对于字段则没有这回事,引用是谁就访问谁的。 静态方法是不能被复写的,所以也不存在访问到子类的该方法
------
多态注意点
           
            1、向下转型时要注意:只有当父类引用指向自己的子类时,才能把该引用转换为子类,例如 animal a=new cat(),cat c=(cat) a,切勿                              出现把父类对象强转为子类
            2、多态自始至终都是子类对象在做着改变
            3、在转型时,判断一个引用变量的所属类型  a  instanceof cat  判断a是不是cat的子类

多态边缘知识点
   Object中的equals、通过复写这个方法,定义自己的比较方式。
    toString


多态的应用小例
/**
 * 勤快动手,江山我有。
 */
package com.edu;
/**
 * 目的:旨在学习多态的使用
 * 需求:模拟电脑主板与网卡声卡等关系,让主板和声卡、网卡通过PCI槽解耦
 * @author duanlang
 *
 */
public class Polymorphism {
 /**
  * @param args
  */
 public static void main(String[] args) {
  // TODO Auto-generated method stub
  new MainBoard().useCard(new SoundCard());
  new MainBoard().useCard(new NetCard());
 }
}
/**
 * 定义PCI标准
 * @author duanlang
 *
 */
interface PCI{
 public void open();
 public void close();
}
/**
 * 定义实现了PIC接口的声卡
 * @author duanlang
 *
 */
class SoundCard implements PCI{
 public void open(){
  System.out.println("open soundcard");
 }
 public void close(){
  System.out.println("close soundcard");
 }
}
/**
 * 定义实现了PIC接口的网卡
 * @author duanlang
 *
 */
class NetCard implements PCI{
 public void open(){
  System.out.println("open netcard");
 }
 public void close(){
  System.out.println("close netcard");
 }
}
class MainBoard{
 public void useCard(PCI pci){
  pci.open();
  pci.close();
 }
}



  

----------------------ASP.Net+Unity开发、.Net培训、期待与您交流! --------------------

0 0
原创粉丝点击