本篇文章主要是想简单说一说java的访问控制。主要由几下几点组成:
问题的由来:
JAVA有一个比较显著的特点就是拥有丰富的jar包库,这些类库可以方便开发者在处理一些特定问题是可以让注意力集中在业务处理上,而不必过多关心部分实现。但是有一个问题,如果Java某天需要更新了(java也确实一直在更新),发现某个jar包里某种实现换一种方式更好实现,或者效率更高等等。但是jar包里面的底层实现也被开发者调用了,此时如果需要更新底层实现,势必会影响开发者的调用。类库就需要遵循一个约定:类库创建者可以自由更改代码的前提是保证调用者不会受到变动的影响。这个时候java访问控制概念应运而生。其实,不光只是java里的jar包,在实际开发中,公司内部拥有自身的类库和工具包等,都会有这样的问题。
冲突
访问控制的问题还有一个缺陷,即如果开发者在选择调用ArrayList类时,发现其他地方也有一个ArrayList类,并且这两个类由不同的公司开发的。怎样解决冲突并让调用者
显而易见的知道两个类分别属于哪一个公司呢,此时,包的概念也就出来了,用关键字package将一组java类聚合在一起,(真正聚合的其实是class文件),调用者使用import关键字导入。
访问控制
总所周知,JAVA的访问控制通过4个访问提示符来实现的。针对类中的每个成员,无论是方法还是成员变量,在它们的最前面加上public、protected、不添加任何(友好的)、private即可控制访问。结论如下图:
①、当指在子类中用子类对象访问父类,即在子类中用子类对象访问与子类不同包的父类的protected成员变量或者方法。
②、如果在子类中用父类对象访问父类,不能直接使用父类对象调用,而是需要使用关键字“super”,关于super关键字,会在以后的文章详细讲解。
类的访问权限
上面说的都是方法和变量,其实类的访问权限只有public和友好的(内部类除外)。private 不能修饰类,我大概认为是这样没意义,被private修饰的类别人也访问不了。而protected暂时想不到什么比较好的解释。希望有大神告知。