黑马程序员——Java基础-多态
2015-07-24 22:40
459 查看
------- android培训、java培训、期待与您交流!
----------
多态
允许不同类的对象对同一消息做出响应,即同一消息可以根据发送对象的不同采用不同的行为方式。例如:定义一个动物进食方法,这个方法可以接收动物对象的调用,猫调用这个方法是吃鱼,狗调用这个方法是啃骨头。
1.多态的体现
父类的引用指向了自己的子类对象
父类的引用也可以接收自己的子类对象
2.多态的前提
必须是类与类之间有关系,要么继承,要么实现
通常还有一个前提,存在覆盖
3.多态的好处
多态的先大大的提高了代码的扩展性
4.多态的弊端
提高了扩展性,但是只能使用父类的引用访问父类中的成员
通过继承实现多态
通过接口实现多态
----------
多态
允许不同类的对象对同一消息做出响应,即同一消息可以根据发送对象的不同采用不同的行为方式。例如:定义一个动物进食方法,这个方法可以接收动物对象的调用,猫调用这个方法是吃鱼,狗调用这个方法是啃骨头。
1.多态的体现
父类的引用指向了自己的子类对象
父类的引用也可以接收自己的子类对象
2.多态的前提
必须是类与类之间有关系,要么继承,要么实现
通常还有一个前提,存在覆盖
3.多态的好处
多态的先大大的提高了代码的扩展性
4.多态的弊端
提高了扩展性,但是只能使用父类的引用访问父类中的成员
通过继承实现多态
class Animal { void eat() { System.out.println("Animal eat"); } } class Cat extends Animal { void eat()//覆盖父类方法 { System.out.println("Cat eat"); } void catchMouse()//特有方法 { System.out.println("Cat catchMouse"); } } class DuoTaiDemo { public static void main(String[] args) { Animal a=new Cat();//类型提升,向上转型。(byte b=2,int x=b,b转为int型) a.eat(); //如果想要调用猫的特有方法时,如何操作? //强制将父类的引用转成子类类型,向下转型。 Cat c=(Cat)a;//向下转型。 c.catchMouse(); //千万不要出现这样的操作,就是将父类对象转成子类类型。 //我们能转换的是父类引用指向了自己的子类对象时,该引用可以被提升,也可以被强制转换。 //多态自始至终都是子类对象在做着变化。 //Animal a=new Animal(); //Cat c=(Cat)a;不行,动物不能转成猫 //对象多态的实现自始至终都是子类对象在变化 //Animal a=new Animal();这里的a是自己的对象 //Animal a=new Cat();这里的a是子类的引用 } }
通过接口实现多态
interface PCI//PCI插槽是连接主板和各种功能卡的接口 { public void open(); public void close(); } class MainBoard { public void run() { System.out.println("MainBoard run"); } public void usePCI(PCI p)//主板通过PCI插槽来扩充功能 { if(p!=null) { p.open(); p.close(); } } } class NetCard implements PCI { public void open()//重写接口方法 { System.out.println("netcard open"); } public void close()//重写接口方法 { System.out.println("netcard close"); } } class SoundCard implements PCI { public void open()//重写接口方法 { System.out.println("soundcard open"); } public void close()//重写接口方法 { System.out.println("soundcard close"); } } class DuoTaiDemo { public static void main (String[] args) { MainBoard mb=new MainBoard(); mb.run(); mb.usePCI(null); mb.usePCI(new NetCard());//匿名对象相当于PCI p=new NetCard(),将p传入 mb.usePCI(new SoundCard());//PCI p接收将其实现的子类对象 } }
相关文章推荐
- java对世界各个时区(TimeZone)的通用转换处理方法(转载)
- java-注解annotation
- java-模拟tomcat服务器
- java-用HttpURLConnection发送Http请求.
- java-WEB中的监听器Lisener
- Android IPC进程间通讯机制
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- 介绍一款信息管理系统的开源框架---jeecg
- 聚类算法之kmeans算法java版本
- java实现 PageRank算法
- PropertyChangeListener简单理解
- 插入排序
- 冒泡排序
- 堆排序
- 快速排序
- 二叉查找树
- [原创]java局域网聊天系统