覆盖重载隐藏遮蔽遮掩

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

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值