隐藏和覆盖

来源:互联网 发布:苹果mac管理员密码忘记 编辑:程序博客网 时间:2024/04/30 21:27

全部域、方法都被继承。
对于所有方法,权限都不可以变的更严格,这个和域不一样。


一、域可以被隐藏(子类定义同名域,权限、类型无要求)【隐藏 = 定义同名域】
<1>不隐藏的时候,在权限范围位置调用即可【private域较特别,即使在权限范围代码里,子类对象也需要转型才可直接调用】
<2>若隐藏,根据对象的(声明)类型调用
二、方法
覆盖:子类定义同签名方法,权限不能更严格,返回类型要匹配【基类方法返回类型的子类】;
  若覆盖,按动态绑定规则【P158】调用。
隐藏:子类定义同签名方法,修饰、类型无要求【private】,修饰、类型要一致【static】,具体如下:
  <1>不隐藏 <2>隐藏 ;都和域类似。
1.private方法,可以隐藏【只要是private,同时被final或者static修饰也行】
2.static方法,只能以覆盖的规则重定义,且还为static(隐藏),但不可以用@override
3.final方法,不可以隐藏、覆盖。
4.构造器,不能同签名。
  以上4种为静态绑定;而动态绑定的方法通常只用public\protected\默认,来修饰
三、补充关于静态方法和域
<1>若子类没有进行重定义隐藏,可以用B.field, B.method()调用A中定义的static域和方法
<2>若子类进行了重定义隐藏,上述方式调用的是在B中定义的static域和方法。【如果重定义的域不是static,这个引用会报错】
Author:
huameicc
0 0
原创粉丝点击