多态随笔
多态这东西说实话当时我摸鱼的时候总觉着多态不太对头,当时题主还是菜鸡一只写代码就没用过多态,也就不知道java的特性 说实话多态是JAVA继承,封装,多态中最重要的
比如 同一个动作 人也跑 小狗小猫也跑,跑起来是不一样的 说明同一行为通过不同的事务,挺闲出来的形态不同,多态就是描述这个的。
多态的前提
继承或者实现 (我之前面向过程的思维老严重了 从来没有继承的概念导致代码冗余度巨大)
方法的重写
父类引用子类的对象
格式
父类类型 变量名 = new 子类对象; 变量名.方法名();
父类类型:指的是对象继承的父类的类型,或者实现父类接口的类型
代码如下
Fu f = new Zi(); f.method();
对了,我们使用多台的方式调用方法的时候我们要看父类有没有这个方法不然会报错,有的话我们就执行的是子类重写后的方法
字面意思我就不写实例啦。
类型转换
向上:多台本身就是子类像父类向上转换的过程,默认滴,父类引用指向子类是就是向上转型啦;
不信你看
父类类型 变量名 = new 子类类型();
向下类型:父类类型想子类类型转换,这个得强制
比如
子类类型 变量名 = (子类类型) 父类变量名
哈哈哈哈 聪明的你看到这里也懵了吧 为啥转型啊
我们用多态的方式调用方法的时候,首先检查父类有没有这个方法没有就出错,不能调用子类有父类没有的方法
如果你想用的话,就得对他进行向下转型
public class Dog { public void eat(){ System.out.println("吃骨头"); } public void catchMouse(){ System.out.println("看家"); } } abstract class Animal{ abstract void eat(); } class Cat extends Animal{ public void eat(){ System.out.println("猫吃鱼"); } public void catchMouse(){ System.out.println("抓老鼠"); } }
public class Test { public static void main(String[] args) { //上转 Animal a = new Cat();//Cat的eat a.eat(); //下转 Cat c = (Cat)a; c.catchMouse(); //用的是Cat的CatchMouse } }
浙公网安备 33010602011771号