自己复习看的 部分内容不严谨
重写和重载(继承和接口)
接口
- 接口是只有抽象方法的一个类,说白了就是十分纯粹的抽象类
- 他只能通过别的类implement它才能发挥效用
- 具体类 > 抽象类 > 接口 (类的容量越来越少)
重写和重载
- 重写一定不能改变传参,重载必须改变传参。
- 重写的返回值不变或返回子类型,重载返回值无限制。
- 重写可以减少或消除抛出异常,但一定不能抛出新异常,而重载无限制。
- 重写的访问可以不变或放宽,重载无限制。
- 重写的调用在运行时由堆顶实例的对象类型决定,重载的调用由重载后的引用类型,在编译过程中决定,运行时调用还是一个虚拟方法,但是编译器总是知道调用的方法签名,所以运行时匹配的参数已经被确定了,只是没有在方法实际所在的类中。
重载意义:方便客户调用,对应给出的不同参数列表进行不同的方法调用
要求:重载会检查签名一致,并且可见度要么不变要么增加(就是public,private那些)。
马类继承了动物类并且重写其中的吃方法,而马类在重写吃方法后又在类中重载了一个吃方。
在调用方法时,首先看对象类型,若为动物,那么就吃父类的吃,要是马,有参数则吃重载的吃,没参数就吃重写的吃,动物类的吃要是吃带参数的吃会报错。
这里要注意最后一个,仍然在父类引用类型中寻找合适的参数对应方法,找不到,只能说在父类中找到合适的,然后重写匹配到实际方法,如果引用重载,要从实际类型进入再调用。
-所有子类型相同的操作,父类型不需要重写。
-子类型中重写的要么是独有方法,要么是和其他子类型中实现有出入
-继承后可以使用super来调用父类中纯粹的未重写方法。
-调用父类的构造方法时,必须是构造器的第一条语句。