覆盖重载隐藏遮蔽遮掩

2017/02/12 iteye
  1. override 覆写     用于实例方法,签名相同,动态分派     a) 子类方法限定要大于等于父类。即限定变大了。     b) Never add exception types to the throws clause of a method overridden in a subclass         也即不能添加更多的异常到子类签名中。可以是父类异常的子类异常,甚至不加异常。所以异常应该是变小了。这主要是为了遵守Liskov OOP 替换原则。子类必须能替换父类,如果子类里有新加的异常,Try/Catch起码要引起变动。相反,子类没有异常并不影响现有的代码。   2. Hide 隐藏  子类属性隐藏父类的,也即父类属性不能继承到子类中(相同名字的话,可以是不同类型)。当然可以通过把子类转型到父类访问父类的属性。这是与覆写不同的地方。 a)  private 属性根据dynamic type决定 frendly,pretected,public 属性根据static type 决定 静态属性根据类名决定,与类实例无关(即使是static final 类型的子类亦可Hide)   3. overload 重载  父类frendly / pretected / public 方法会继承到子类中,这时父类和子类中相同的方法签名也是overload(重载)。并不是只有定义在一个类中的方法才构成重载。 注意重载哪个方法是在编译时选择的,这与Override非常不同。    4. shadow 遮蔽 变量,方法或类型都有可能 常见的是临时变量遮蔽了类变量或者全局变量。对象方法遮蔽了static import进来的方法。 外围类(enclosing class)包含一个内部类(inner class),内部类(比如继承Thread类)继承的成员方法(比如sleep)遮蔽了外围累(enclosing class)的方法。    5. obscure 遮掩 变量可以遮掩类型,类型可以遮掩包。也即优先级不一样 比如声明一个变量名字为System(非正规的命名),该变量System会obscure Java系统类型System  

Search

    Table of Contents