Java学习第十天
来源:互联网 发布:2012年梅西进球数据 编辑:程序博客网 时间:2024/06/05 12:05
基本类型:
自动类型转换:由小往大
强制类型转换:由大往小
引用类型:
向上类型转换:由子类转换成父类(自动转换)
向下类型转换:由父类转换成子类(强制转换)
Pet p1 = new Dog();
Dog d1 = (Dog) p1;
Pet[] pets = new Pet[];
pets[0]=new Dog();
Dog temp = (Dog)pets[0];
这两种可以强制转换
以下情况不允许强制转换:
Pet p2 = new Pet();
Dog d2 = (Dog) p2;
Pet[] pets = new Pet();
pets[0]=new Pet();
Dog temp = (Dog) pets[0];
实现多态的步骤:
1、用父类做类型
方法的参数是父类类型
2、在父类中编写虚方法(有{},但是没有方法体)
3、在调用时,参数传递的是子类对象
什么是多态
同一父类类型,赋值不同子类对象,在调用相同方法时,执行不同的方法体
分析:多态的实现原理
父类的对象的方法,被不同的子类的同名的方法会给覆盖掉
当子类有和父类相同方法头的方法时,子类的方法会重写(覆盖掉)父类里的方法
那么调用重写(覆盖掉)的方法时,无需转换为子类类型
使用多态的做法:
1、在父类中编写虚方法/抽象方法
2、在子类中重写父类的方法
3、使用时,用父类做类型,赋值子类对象
关键点:
1、方法重写:
子类重写父类的方法,重写和被重写的方法,一定要有相同的方法头
2、LSP 里氏替换原则 父类做类型,赋值时赋的是子类对象
【多态说明】
1、如果子类独有的方法,父类里没有,无法实现多态
2、只有方法才能实现多态
3、多态的好处:有利于程序的扩展
面向对象三大特征:
封装:数据(属性值)的安全性(合理性)
继承:代码复用的
多态:有利于程序的扩展(增加新功能后不修改原有代码)
实现多态的方式:
种类1:使用方法重写来实现多态,动态方式实现
在调用父类的虚方法时,系统检测哪个子类的方法来进行覆盖,覆盖后才进行调用(主要使用)
种类2:使用方法重载来实现多态,静态方式实现
虚方法:有{},但是没有方法体
既然没有方法体,是否可以编写一个方法头?
优化:使用抽象方法来优化
抽象方法:只有方法头,没有方法体,连{}也没有,使用abstract来修饰
【说明】
1、抽象方法的所在的类,一定是抽象类
2、抽象类不允许创建类的对象
面向对象设计的步骤:
1、发现类
2、发现类的属性
3、发现类的方法
4、优化(封装、继承、多态)
封装:属性都设置为private 封装对应属性的getXXX和setXXX方法
对“敏感”数据进行有效性的验证
继承:找系统中相关联的类中共同的属性或行为,找到后放在父类中
子类中存放子类独有的成员
在子类构造方法中如何显示的调用父类的构造方法
super();
【注意】父类的方法通常是抽象的,抽象方法的存在意义是让子类重写
通常创建的是子类对象
继承的通常是父类的属性,方法也可以继承
多态:同一父类类型,使用的是不同子类的对象,调用同一个方法,执行不同的方法体
多态针对的是方法
实现步骤 1、 在父类中编写虚方法/抽象方法
2、 在子类中重写父类里的虚方法/抽象方法
方法重写
3、使用时用父类做类型,赋值时是子类的对象
方法重写和方法重载的区别:
1、位置不同:重载是在同一个类中的方法进行重载,而重写是在子类里重写父类里方法
2、方法重写要求子类的方法头必须和父类里的被重写的方法头一致
重载要求方法名相同,参数不一致
3、都能实现多态,重写是动态实现多态,重载是静态实现多态
- Java学习第十天
- JAVA学习第十天
- Java学习第十天
- Java学习第十天
- java学习笔记--第十天
- 9/22 java学习第十天
- 黑马程序员java学习第十天,异常
- java学习总结——第十天
- 黑马程序员--java学习笔记第十天
- java学习第十天之包
- Java学习过程(第十天)
- Java学习第十一天
- java学习第十一周
- JAVA学习第十一天
- JAVA学习第十三天
- JAVA学习第十五天
- Java学习第十七天
- Java学习第十九天
- 奶牛的编号
- 怎么监控安卓的CPU、内存---使用emmagee软件监控
- 缓存检索的介绍
- RxJava2和Retrofit2实现简单网络请求
- 无法连接到云服务器上的MYSQL
- Java学习第十天
- linux下nfs服务器的安装与挂载
- python 通过电话号码获取微信性别信息
- Python随笔1
- BZOJ 5056 OI游戏 (最短路径树)
- java web 实现用户登录界面
- 为什么没有字节流转字符流的IO对象?
- 循环链表示例:求解约瑟夫问题
- 《完全版线段树》- NotOnlySuccess