方法的重载和重写都是实现多态的方式,区别在于重载实现的是编译时的多态性,而重写实现的是运行时的多态性。重载发生在一个类中,同名的方法如果有不同的参数列表(参数类型不同、参数个数不同或者二者都不同)则视为重载。重写发生在子类与父类之间,重写要求子类被重写方法与父类被重写方法有相同的参数列表,有相同的返回类型,比父类被重写方法更好访问,不能比父类被重写方法声明更多的异常(里氏代换原则)。重载对返回类型没有特殊的要求,不能根据返回类型进行区分。
>>>重写和重载的区别:
- 方法名、参数、返回值相同。
- 子类方法不能缩小父类方法的访问权限。
- 子类方法不能抛出比父类方法更多的异常(但子类方法可以不抛出异常)。
- 存在于父类和子类之间。
- 如果方法被定义为 final,则不能被重写。
- 参数类型、个数、顺序至少有一个不相同。
- 不能重载只有返回值不同的方法名。
- 在同一个类中。
=>重写
编译看父类,运行看子类。
- 实例代码
测试一下>>>
运行结果>>>
会得到这样的运行结果,还是因为重写的“编译看父类,运行看子类”。
在上面的代码中, Father father = new Son(); 在编译时,编译器会先检查Father类中是否有write() 方法,如果有,编译通过。在运行时,new Son()对象,并赋给father。Java虚拟机就会知道father引用Son 对象,所以调用的是子类的方法,而不是父类的。
=>重载
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/117938.html