博客网 >

对于JAVA的权限修饰的语法,也许我们已经看到很熟悉了。但是有时候如果没有真正地去了解它,像下面的这样的小问题还真的会不时地出现在我们的程序中。
建立一个JAVA的项目,项目里面有两个包:com.kevin.test1和com.kevin.test2。(见图1)
文件结构如下:
    com.kevin.test1
                ――superClass
                ――subClass1
    com.kevin.test2
                ――subClass2

其中subClass1和subClass2都是superClass的子类。


          (图1)
superClass类内容为:

          (图2)
类subClass1内容为:

       (图3)
类subClass2内容为:

          (图4)
  在父类superClass中有一个变量size为protected,而我们两个子类的内容是一样的,都是用父类生成一个对象superClass sp = new superClass(5)。但是当调用以下语句:System.out.println(sp.size);时,这两个类却发生了不同的情况,在subClass1中上面的语句是正确执行的(见图3第19行),但是在另一个类subClass2中上面的语句即是错误的(见图4第22行)。这是为什么呢?为什么在不同的类产生了不同的效果呢?这正是我们今天要解决的问题:
  
  经过仔细的观察,我们可以发现问题的所在:
  在类subClass2(图4的21句)中生成的对象sp虽然仍是由类superClass生成的,但是由于它所在的类不与原来的父类superClass在同一个包里,所以它与父类superClass的关系不能是protected的关系,而且也不能是friendly的关系,所以在类subClass2中是使用superClass是访问不到它的变量的。如果要访问则只能由其子类的对象来访问(图4的17、18句)。
  而在类subClass1中,由于与superClass是处于同一个包里面,所以由superClass生成的变量sp(图3的18句)与原来的类superClass则可以达到friendly的关系。所以可以访问其变量。

  总结:由于我们对于访问权限的关注往往只是停留在概念的理解上,对于测试也可能经常由于把类放在同一个包中而没有发现像这样的问题。但是当像这样的错误发生之后,我们要如何去解决它呢?个人认为重点并不在于解决问题,因为现在的许多错误IDE都可以帮我们指出来,而更重要的是认清楚问题的本质,从根本上理解它的机制,以后再碰到相似的问题才不会出现模糊不清的情况

<< 朋友别哭 / (转贴)六种异常处理的陋习 >>

专题推荐

不平凡的水果世界

不平凡的水果世界

平凡的水果世界,平凡中的不平凡。 今朝看水果是水果 ,看水果还是水果 ,看水果已不是水果。这境界,谁人可比?在不平凡的水果世界里,仁者见仁,智者见智。

中国春节的那些习俗

中国春节的那些习俗

正月是农历新年的开始,人们往往将它看作是新的一年年运好坏的兆示期。所以,过年的时候“禁忌”特别多。当然,各个地方的风俗习惯不一样,过年的禁忌也是不一样的。

评论
0/200
表情 验证码:

kinven

  • 文章总数0
  • 画报总数0
  • 画报点击数0
  • 文章点击数0
个人排行
        博文分类
        日期归档