java笔记--day09--多态(二)
来源:互联网 发布:淘宝香火符咒西极飞飞 编辑:程序博客网 时间:2024/06/12 12:57
引言
从上一个笔记中,可以看出,多态的向上转型(Fu f = new Zi();)是不能访问子类中特有功能的。那么其解决办法是什么呢?- 向下转型(downcasting)
以下代码为未转型的代码:
class Fu{ int num1; public Fu(){ num1 = 10; } public void show1(){ System.out.println("num1 is " + num1); } public static void show3(){ System.out.println("static function in Fu class"); }}class Zi extends Fu{ int num1 = 11; int num2 = 20; public Zi(){} public void show1(){ System.out.println("num1 is " + num1); } public void show2(){ System.out.println("num2 is " + num2); } public static void show3(){ System.out.println("static function in Zi class"); }}class PolymorphicDemo2{ public static void main(String[] args) { Fu f = new Zi(); System.out.println("num1 is " + f.num1); //member variable //System.out.println("num2 is " + f.num2); //This line must be commented out,or there is a fail during compilation. //(error:can not find the symbol) f.show1(); //f.show2();//This line must be commented out,or there is a fail during compilation. //(error:can not find the symbol) f.show3();//static member method }}/*running result:num1 is 10num1 is 11static function in Fu class*/
- 然后是使用了向下转型之后,能访问子类特有功能的Demo:
class Fu{ int num1; public Fu(){ num1 = 10; } public void show1(){ System.out.println("Fu num1 is " + num1); } public static void show3(){ System.out.println("static function in Fu class"); }}class Zi extends Fu{ int num1 = 11; int num2 = 20; public Zi(){} public void show1(){ System.out.println("Zi num1 is " + num1); } public void show2(){ System.out.println("Zi num2 is " + num2); } public static void show3(){ System.out.println("static function in Zi class"); }}class PolymorphicDemo2{ public static void main(String[] args) { Fu f = new Zi(); System.out.println("num1 is " + f.num1); //member variable //System.out.println("num2 is " + f.num2); //This line must be commented out,or there is a fail during compilation.(error:can not find the symbol) f.show1(); //f.show2();//This line must be commented out,or there is a fail during compilation.(error:can not find the symbol) f.show3();//static member method System.out.println(); Zi z = (Zi)f; z.show2(); }}/*running result:num1 is 10Zi num1 is 11static function in Fu classZi num2 is 20*/
- 总结
从running result的最后一句话(Zi num2 is 20)中可以看出:
使用了向下转型(Zi z = (Zi)f;),就可以摆脱多态的弊端,从而可以访问子类所特有的功能
0 0
- java笔记--day09--多态(二)
- java笔记--day09--抽象类(二)
- java笔记--day09--多态(一)
- java笔记--day09--接口(二)接口成员特点
- 面向对象 (多态)+JAVA学习笔记-DAY09
- Java基础:Day09笔记内容 (继承)
- java笔记--day09--抽象类(一)
- java笔记--day09--接口(一)
- java笔记--day09--接口(四)练习
- [Java视频笔记]day09
- java笔记--day09--final关键字
- day09笔记
- 黑马程序员 java学习笔记(day09)
- java笔记--day09--关于多态的两个案例(猫狗和老师学生)
- java笔记--day09--接口(三)类和接口的关系
- java笔记--day09--接口(三)抽象类和接口的区别
- java编程自学记录(day09)
- 21天学通Java学习笔记-Day09(IO流)
- Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock'
- MSDN控件样式和模版
- jenkins 使用 curl 触发 jenkins 编译 & 自动从ftp上下载更新程序库
- Sybase数据库表备份
- Linux mount挂载共享文件
- java笔记--day09--多态(二)
- ALSA声卡笔记1---ALSA驱动框架
- docker 常用命令(持续更新)
- iOS 通讯录操作 删除联系人 以及联系人多个号码 如何删除其中一个号码
- [iOS]百分比编码
- 选项卡实现(使用this)
- Python中文件读取方法read(),readline(),readlines()的区别
- Swift-->Http网络请求(NSURLSession, Alamofire)
- leetcode_c++:树:Populating Next Right Pointers in Each Node II(117)