面向对象相关知识总结

多态

向上转型:通过父类的引用引用,调用子类和父类重写的那个方法
动态绑定:父类引用,引用子类对象是大前提(发生向上转型),同时父类和子类有一个同名的方法(覆盖/重写的方法),再通过父类的引用调用父类和子类同名的方法,此时会发生动态绑定 --》多态
面向对象相关知识总结

调用:面向对象相关知识总结
注意:父类引用,引用子类对象之后只能调用父类自己的方法或者成员变量,除非这个方法在子类中也重写了,这时才会调用子类的这个重写的方法!!!

例如:bird中的fly就不能被调用面向对象相关知识总结
面向对象相关知识总结
但是可以使用如下方法对fly进行调用(向下转型:父类向子类引用面向对象相关知识总结
但是向下转型不是很安全,在想将猫转换为鸟的时候,会发生报错,因为猫和鸟之间没有关系,面向对象相关知识总结
此时可以加一个if语句来判断两者之间是否可以发生转型
面向对象相关知识总结
而且构造方法也会发生动态绑定
面向对象相关知识总结
理解多态:
定义一个父类Shape类,里面有个draw方法,但是方法里面没有任何东西,然后在子类中同时也实现draw方法(可以使用Alt+insert快捷键实现)
面向对象相关知识总结

可以写一些只关注父类的代码(drawMap函数), 就能够同时兼容各种子类的情况,如下:
面向对象相关知识总结
使用多态的好处:
1、 类调用者对类的使用成本进一步降低
2、能够降低代码的 “圈复杂度”, 避免使用大量的 if - else
3. 可扩展能力更强

还可以定义一个Shape类型的数组,用for循环实现调用
面向对象相关知识总结

抽象类

面向对象相关知识总结

Shape shape = new Shape();//错误
因为抽象类不可以被实例化

抽象类的出现方便了对代码的检查

抽象类也可以发生向上转型和多态
面向对象相关知识总结

接口

面向对象相关知识总结
面向对象相关知识总结
面向对象相关知识总结
面向对象相关知识总结

理解接口:
接口的命名一般都是动作,例如:
面向对象相关知识总结
面向对象相关知识总结
class Cat extends Animal implements IRun:Cat继承于Animal,实现于IRun接口
面向对象相关知识总结
实现:有两种方法,直接使用和调用walk函数面向对象相关知识总结
注意:接口也可以发生多态

接口的使用实例
面向对象相关知识总结
面向对象相关知识总结
此时程序需要进行如下右边程序改变:
Comparable接口面向对象相关知识总结
compareTo的比较
面向对象相关知识总结
面向对象相关知识总结