Java学习第十天

基本类型:
自动类型转换:由小往大
强制类型转换:由大往小

引用类型:
向上类型转换:由子类转换成父类(自动转换)
向下类型转换:由父类转换成子类(强制转换)
   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、都能实现多态,重写是动态实现多态,重载是静态实现多态

猜你喜欢

转载自blog.csdn.net/bii_yu/article/details/78137331