---------------------- 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 stubnew 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培训、期待与您交流! --------------------