因为方法重载和重写服务于多态,所以讲多态前,咱们先复习一下,方法的重写和方法的重载以便更好的理解多态。
方法重写
方法重写是什么?
方法重写针对的是父子类,在子类中有一个方法原型部分和父类方法原型完全一样,方法体不同的方法叫做方法重写。
注意 :
子类重写父类方法时,访问权限必须大于等于父类的访问权限。
例如:父类的访问修饰符是public,子类的访问修饰符必须是public
父类:
子类:
方法重写产生的效果?
1.在子类里面用this. + 方法名调用自己的方法,用super. + 方法名调用父亲的方法
2.在外面的类,用实例名. + 方法名调用自己的方法和父类的方法。值得注意的是如果调用子类重写后的方法,真正运行的方法体是子类的,在外面调不到父类被重写后的方法了,如果还想调用父类的方法那只能在子类里面用super. + 方法名调用父类的方法,然后在外部用实例名.调用子类的方法。具体实现如下:
父类
子类
测试类:
测试结果:
方法重载
什么是方法重载?
方法重载关注的对象是一个类,在一个类的内部,有若干个名字相同,参数不同的方法叫做方法重载。参数不同指的是参数的个数,参数的类型以及参数的顺序
注意的是:和修饰符(public,private等)和 返回值类型无关。
多态
多态是什么?
多态是同一物体在不同情况下表现出不同的状态叫做多态。
为了更好的理解,我们举一下例子,一个人,他家里有父亲母亲,妻子,儿子和女儿。
在父亲母亲面前他的角色是儿子,就要担负起赡养老人的责任,在妻子面前,角色是丈夫,而丈夫可以帮妻子付钱,在儿子女儿面前是父亲,父亲的会好好照顾子女,在不同情况下表现出来不同状态就要做多态。
用方法重载来实现一下多态
方法重载的特点是方法名相同参数的不同
儿子
丈夫
父亲
人
测试类
运行结果
方法重写来完成多态
想尽办法用父类的实例装载子类的空间
向上转型(父类装载子类)
1.声明什么类型,调用的就是什么类型的属性和方法
语法:Father father = null;//只能调用父类拥有的方法,和子类重写父类的方法
2.创建什么类型,真正运行的就是什么类型的方法
语法:father = new Son();//father.方法(可调用父类被重写的方法,运行的是子类里面的方法体,也可以调用父类没有被重写的方法,运行的是父类自己的方法体)
向下转型(父类强制转换为子类)
父类的范围大,子类的范围小,将大的装进小的里面要进行强制类型转换
语法: Son son = (Son)father;//强制类型转换后,son. 就可以调用子类里面所以方法了,因为子类拥有父类的所有的属性和方法,所以子类也可以调用父类的属性和方法(除了私有的)
例子:父类:H2o,子类为汽,液, 固三种形态继承H2o,条件不同,表现的形态不同
父类:H2o
子类:汽态
子类:液态
子类:固态
测试类
测试结果