多态
- 多态的基础语法:
- 学习多态基础语法之前,我们需要普及两个概念:
- 第一个:向上转型
- 子------->父 (自动类型转换)
- 第二个:向下转型
- 父----->子(强制类型转换,需要加强制类型转换符)
java中允许向上转型,也允许向下转型。无论是向上转型,还是向下转型。两种类型必须有继承关系,没有继承关系编译器报错。
- 多态指的是:
- 父类型引用指向子类型对象。
- 包括编译阶段和运行阶段。
- 编译阶段:静态绑定父类的方法。
- 运行阶段:动态绑定子类型对象的方法。
- 多种形态。
什么时候必须使用向下转型?
不要随便做强制类型转换。因为强转有风险
当你需要访问的是子类对象中特有的方法,此时必须进行向下转型。
向下转型需要进行强制类型转换。
- 新的运算符:instanceof
- 1、instanceof可以在运行阶段动态判断引用指向的对象的类型。
- 2、instanceof语法:
- (引用 instanceof 类型)
- 3、instanceof运算符的运算结果只能是:true/false
- 4、假如c是一个引用,c变量保存了内存地址指向了堆中的对象。
- 假设(c instanceof Cat)为true表示:
- c引用指向的堆内存中的java对象是一个Cat。
- 假设(c instanceof Cat)为false表示:
- c引用指向的堆内存中的java对象不是一个Cat。
程序员要养成一个好习惯:
任何时候,任何地点,对类型进行向下转型时,一定要使用instanceof 运算符进行判断。
软件在扩展过程当中,修改的越少越好。
修改的越多,你的系统当前得到稳定性就越差,未知的风险就越多。
高手开发项目不是仅仅为了实现客户的需求,还需要考虑软件的扩展性。
软件开发原则有七大原则(不属于java,这个开发原则属于整个软件业)。
其中有一条最基本的原则:OCP(开闭原则)
什么是开闭原则?
对扩展开放(可以额外添加),对修改关闭(最好很少的修改)。
在软件的扩展过程当中,修改的越少越好。
多态在开发中有什么作用?
降低程序的耦合度,提高程序的扩展力。
public class Master(){
public void feed(Dog d){}
public void feed(Cat c){}
}
以上代码中表示Master和Dog以及Cat的关系很紧密(耦合度高),导致扩展力强很差。
public class Master(){
public void feed(Pet pet){}
pet.eat();
}
以上代码中降低了耦合度,提高了软件的扩展力。
- 面向对象的特征:
- 封装,继承,多态
- 真是一环扣一环
- 有了封装,有了这种整体的概念之后。
- 对象和对象之间产生了继承。
- 有了继承,才有了方法的覆盖和多态。
方法覆盖需要和多态机制联合起来使用才有意义。
假设没有多态机制,只有方法覆盖机制,你觉得有意义吗?
没有多态机制,方法覆盖可有可无。
没有多态机制,方法覆盖也可以没有,如果父类的方法无法满足子类业务需求的时候,子类完全可以定义一个全新的方法。
静态方法存在方法覆盖吗?
多态自然就和对象有关系了。
而静态方法的执行不需要对象了。
所以,一般情况下,我们会说静态方法不存在方法覆盖。
私有方法不能覆盖。
静态方法不谈覆盖。
对于返回值类型是基本数据类型来说,必须一致。
对于返回值类型是引用数据类型来说,重写之后返回值类型可以变得更小。(但是意义不大,开发当中没有人这么写)
- 点赞
- 收藏
- 关注作者
评论(0)