重载(overloading)与重写(overriding)
2013-01-16 14:12
260 查看
重载方法在编译时起作用(例如,静态绑定),重写方法在运行时起作用(例如,动态绑定)。静态绑定意味着JVM在编译时决定调用的类或方法。而动态绑定时,JVM是在运行时决定调用的类或方法。动态绑定设计是多态的基础。
上面这个代码为重载。
子类中重写父类的对应方法必须遵循下面的规则:
在Java5中,新增了注解,其中包括很好用的编译时注解(compile time annotations)@override,来保证方法正确的重写了父类方法。如果在上面的代码中添加了注解,那么JVM会抛出一个编译错误。
public class MethodOverrideVsOverload { public boolean equals( MethodOverrideVsOverload other ) { System.out.println("MethodOverrideVsOverload equals method reached" ); return true; } public static void main(String[] args) { Object o1 = new MethodOverrideVsOverload(); Object o2 = new MethodOverrideVsOverload(); MethodOverrideVsOverload o3 = new MethodOverrideVsOverload(); MethodOverrideVsOverload o4 = new MethodOverrideVsOverload(); if(o1.equals(o2)){ System.out.println("objects o1 and o2 are equal"); } if(o3.equals(o4)){ System.out.println("objects o3 and o4 are equal"); } } }
上面这个代码为重载。
子类中重写父类的对应方法必须遵循下面的规则:
参数 | 不可变(包括参数类型和个数)。 |
返回类型 | 不可变,除了协变返回类型或其子类型(covariant (subtype) returns)。 |
异常 | 子类中可以抛出更少的异常,但绝对不能抛出父类中没有定义的已检查异常。 |
访问权限 | 比父类中对应方法更宽松。 |
调用 | 运行时(也就是动态绑定),根据对象类型来决定调用的具体方法。 |
在Java5中,新增了注解,其中包括很好用的编译时注解(compile time annotations)@override,来保证方法正确的重写了父类方法。如果在上面的代码中添加了注解,那么JVM会抛出一个编译错误。
相关文章推荐
- 用文字描述Overloading(重载)和Overriding(重写)的区别。
- java中重载Overriding与重写Overloading的区别
- java中的重载(overriding)跟重写(overloading)理解
- Java 重写(Overriding)和重载(Overloading)
- JAVA基础(一)——重载(Overloading)与重写(Overriding)的区别
- Java学习笔记之重写(Overriding)与重载(Overloading)
- 方法的重载(overloading)与重写(overriding)
- java语言中方法重载overloading和方法重写(覆写)overriding的区别
- Java基础--重写(Overriding,覆盖)-重载(Overloading)
- java中重载(Overloading)、重写(Overriding)、重定义(redefinition)
- 重写(Overriding)与重载(Overloading)的区别
- 深入理解重载和重写及与之相关的多态性 Overloading and Overriding(转)
- 黑马程序员 【】java学习之路——重写(Overriding)、重载(Overloading)、多态的简单总结
- Java重载overloading与重写(覆盖)overriding
- 常见Java面试题 – 第三部分:重载(overloading)与重写(overriding)
- 方法的重载(overloading)与重写(overriding)
- 重写(Overriding)和重载(Overloading)区别
- C++类中的 重写(Overriding) 重载(Overloading) 隐藏
- Overloading(重载)和Overriding(重写)的区别
- java中重载(Overloading)和重写(Overriding)