黑马程序员-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 在多态中,静态成员函数的特点
静态函数在继承中没有覆盖的情况
无论编译和运行,都参考左边
弊端:通过多态的特点我们发现 多态提高了扩展性,但是只能使用父类引用访问父类中(存在)的成员
- 黑马程序员-java多态学习笔记
- 黑马程序员:java学习笔记-接口和多态
- 黑马程序员-------java学习笔记之继承与多态
- 黑马程序员--JAVA学习笔记
- 黑马程序员---Java 学习笔记
- 黑马程序员-java学习笔记-java基础
- 黑马程序员 java学习笔记-基础知识盘点
- 黑马程序员 java学习笔记--正则表达式
- 黑马程序员---java多线程 学习笔记
- 黑马程序员---java TCP 学习笔记
- 黑马程序员---java 反射 学习笔记
- 黑马程序员-java集合 学习笔记
- 黑马程序员-java内省学习笔记
- 黑马程序员java学习笔记,集合
- 黑马程序员java学习笔记,多线程
- 黑马程序员-java基础-集合学习笔记
- 黑马程序员-java基础-IO学习笔记
- 黑马程序员------java学习笔记之多线程
- 怎么处理警告:编码 GBK 的不可映射字符和ant的一些错误
- 励志故事:从辍学到月薪一万
- 【面试】4.单链表的反向
- json格式
- C++进行质数判断
- 黑马程序员-java多态学习笔记
- TClientDataSet[20]: 使用 Blob 字段
- 1257: [CQOI2007]余数之和sum(数学分段统计)
- 分集增益
- 万普SDK与strictMode 冲突。
- mysql 复习
- 混淆器生成文件的作用
- 滑动实现多个布局的切换——ViewPager的使用
- 6410裸机启动LCD