面向对象相关知识总结
多态
向上转型:通过父类的引用引用,调用子类和父类重写的那个方法
动态绑定:父类引用,引用子类对象是大前提(发生向上转型),同时父类和子类有一个同名的方法(覆盖/重写的方法),再通过父类的引用调用父类和子类同名的方法,此时会发生动态绑定 --》多态
调用:
注意:父类引用,引用子类对象之后只能调用父类自己的方法或者成员变量,除非这个方法在子类中也重写了,这时才会调用子类的这个重写的方法!!!
例如: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的比较