overriding主要出现在如下两种情况:
(1)对接口方法的实现,在接口中一般只是对方法进行了声明,而我们在实现时,就需要实现接口声明的所有方法。
(2)在继承中也可能会出现子类覆盖父类中的方法。
重写要注意以下的几点:
(1)覆盖的方法的标志必须要和被覆盖的方法的标志完全匹配,才能达到覆盖的效果;(2)覆盖的方法的返回值必须和被覆盖的方法的返回一致;
(3)覆盖的方法所抛出的异常必须和被覆盖方法的所抛出的异常一致,或者是其子类;
(4)被覆盖的方法不能为private,否则在其子类中只是新定义了一个方法,并没有对其进行覆盖。
举例如下:
class A {
public A(){
}
public void fa() {
System.out.println("CLASS A :Function fa Runing......");
}
public void fb() {
System.out.println("CLASS A :Function fb Runing......");
fa();
System.out.println("CLASS A :Function fb Stop......");
}
}
class B extends A {
public B(){
}
public void fa() { // 重写 A类的 fa 方法
System.out.println("CLASS B :Function fa Runing......");
}
public void fb() { // 重写 A类的 fb 方法
System.out.println("CLASS B :Function fb Runing......");
super.fb();
System.out.println("CLASS B :Function fb Stop......");
}
}