SCJP认证 1.5(2) 声明类成员

 

公共成员

当一个方法或变量成员声明为public时,就表示所有其他类(无论他们属于哪个包) 都能够访问该成员(假设类本身是可见的)。

请看下面的源文件:

 

 

现在请看第二个源文件:

 

可以看出,Goo和Sludge位于不同的包中。然而,Goo能够毫无问题地调用Sludge中的方法,因为Sludge类以及其testIt()方法都被标识为public。

对于子类,如果其超类的成员被声明为public,则该子类就会继承其成员,无论这两个类是否同一个包中:

 

 

注意,在前面的代码中,无须在其前面添加引用前缀,即可调用doRooThings()方法。记住:如果看到调用的方法(或者访问的变量)没有点运算符,则表示该方法或变量属于你所看到的代码所在的类。它还指方法或变量整隐含地使用this引用访问。因此,在前面的代码中,Cloo类中队doRooThings()的调用也可以写作this.doRooThings()。this引用总是引用当前正在执行的对象——换句话说,研究生运行this引用代码的对象。因为this引用是隐含的,所以不必将它放在成员访问代码的前面,但是如果加上也不会有什么坏处。一些程序员将其添加上,是为了使代码对新入门(或者完全不懂Java)的Java程序员具有更好的可读性。

除了能够在本身上调用doRooThings()方法之外,其他类的代码也能够像下面的大妈那样调用Cloo实例上的doRooThings():

 

 私有成员

   标识为private的成员,不能被声明该私有成员的泪意外的任何类中的代码访问。让我们对前面例子中的Roo类做一个小小的改动:

 

现在,doRooThings()方法是私有的,因此,其他任何类上都不能使用它。如果试图ongoing其他任何类中调用该方法,就会遇到麻烦:

如果试图编译UserARoo类,则会出现如下编译错误:

cannot find symbol

symbol : method doRooThings()

对Roo类之外的任何代码来说,方法doRooThings()就像不存在一样。情况确实如此。私有成员对该成员自己累之外的任何代码都是不可见的。

子类试图继承其超累的私有成员时会怎么样?当成员声明为私有的时,子类不能继承它。对于考试,要认识到子类不能看到、使用伸着想到起超类的私有成员。然而,可以在子类中声明相同的方法。但是,无论它看起来是什么样子,这绝不是重写方法!它只是彭倩与超类中的私有方法具有相同的名称罢了。重写规则不适用与这种情况。因此,可以对这个新声明的但碰巧名称相同的方法声明信的异常,或者改变其返回类型,或者对其做任何其他事情。

 

现在,doRooThings()方法对所有子类来说都是禁止访问的,甚至对于那些与其超累在同一个包中的子类也是如此:

如果试图编译子类Cloo,则编译器将产生如下错误:

Cloo.java:4 Undefined method: doRooThings()

System.out.println(doRooThings());

1 error

 

子类能重写私有方法吗?这是个有趣的问题。但是,从 技术上讲答案为否。因为,向我我们已经看到的,子类不能继承私有方法,因此它不能重写该方法——重写依赖于继承。

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值