Override

来源:互联网 发布:公司客户数据保密制度 编辑:程序博客网 时间:2024/04/30 09:03

很实用的总结

1:方法的重写要遵循“三同一小一大”的规则。其中
 “三同”即方法名相同,形参列表相同,返回值类型相同;
 “一小”指的是子类方法声明抛出的异常类一个比父类方法声明抛出的异常类更小或相等;
 “一大”指的是子类方法的访问权限应比父类方法更大或相等。

 

2:重写方法和被重写的方法要么都是类方法,要么都是实例方法,不能一个是类方法,一个是实例方法。否则,将引发编译错误。

由于子类不能继承父类的构造方法,因此子类不能重写父类的构造方法。

 

3:如果父类方法具有private访问权限,则该方法对其子类是隐蔽的,因此其子类无法访问该方法,也就无法重写该方法。
这时,即便子类中定义了一个与父类private方法具有相同名称、相同的形参类表、相同的返回值类型的方法,依然不是重写,而只是在子类中重新定义了一个新方法。

(对于抽象方法,如果使用了private,即private abstract className() ;则会报“非法的修饰符组合: abstract和private”的错误。因为private权限不允许子类重写该方法,但抽象方法必须被子类重写,故会出错 )


因此,以下代码是完全正确的:
class Baseclass {
 //test方法是private 访问权限,子类不可以访问改方法
 private void test() {...}
}

class Subclass {
 //此处不是方法的重写,所以可以增加static关键字,当然去掉关键字static也是正确的
 public static void test() {...}
}

 

4:<1>如果子类定义了和父类同名的attribute,也会发生子类attribute覆盖父类attribute的情形。正常情况下,子类中定义的方法直接访问该attribute时只会访问到覆盖的
       attribute,而无法访问到父类被覆盖的attribute;但在子类定义的实例方法中可以通过super来访问父类被覆盖的attribute。
   <2>:如果被覆盖的是类attribute,在子类的方法中则可以通过父类名来调用访问被覆盖的类attribute。
  【3】:如果子类里没有包含和父类同名的attribute,则子类直接继承到父类得分attribute。如果子类在实例方法中访问该属性,则无须显式使用super或父类名作为调者。

【因此】:
         如果在某个方法中访问名为 a 的attribute,但没有显式指定调用者,则系统查找 a 的【顺序】如下:
  (1)查找该方法中是否有名为 a 的局部变量。
  (2)查找当前类中是否包含名为 a 的attribute。
  (3)查找a的直接父类中是否包含a的attribute,依次上溯 a 的父类,直到java.lang.Object类,如果最终不能找到名为 a 的attribute,则系统出现编译错误。

 

 

 

 


原创粉丝点击