码迷,mamicode.com
首页 > 编程语言 > 详细

java基础--访问修饰符之我见

时间:2017-04-01 15:00:35      阅读:242      评论:0      收藏:0      [点我收藏+]

标签:存在   alt   protect   可见   面向   log   条件   面向接口   例子   

1.java修饰符访问权限--public,protected,private,default(package,friendly)

被public修饰的类、类属变量及方法,可以被包内及包外的任何类访问;
被protected修饰的类、类属变量及方法,包内的任何类,及包外的那些继承了此类的子类才能访问;
被private的修饰的类、类属变量及方法,包内包外的任何类均不能访问;
如果一个类、类属变量及方法不以这三种修饰符来修饰,它就是default,也可以称之为是friendly类型的或者package类型,
那么包内的任何类都可以访问它,而包外的任何类都不能访问它,这也包括包外继承了此类的子类,因此,这种类、类属变量及方法对包内的其他类是友好的,开放的,而对包外的其他类是关闭的。

2.private和protected不能修饰类和接口的原因之我见

在使用eclipse作为IDE,在创建类或者接口时,或看到这样的情况:

技术分享

也就是说private和protected修饰符不能修饰类和接口。这是为什么呢?笔者对此做了分析如下

(1)根据private的访问权限限制:private修饰的类和接口不能被其他任何类和接口访问。那么我们定义这样的一个类或者接口有何意义呢?因此不要也罢。

(2)根据protected的访问权限限制:protected修饰的类只能被同一个包中的类或者其子类来访问。那么我们举个例子:假设类B和A不在同一个包,A又是protected类, 如果B想访问A的则B只能是A的子类,而B如果要成为A的子类(或者说B能继承A)的前提又是B能访问A。这两个条件互为前提,无法实现。

3.接口的方法不能使用private,protected,default(friendly)修饰符修饰

技术分享

接口的方法一定是要被其他类来实现的,否则就失去了接口存在的意义。既然需要被其他类来实现,所以接口不能被private,protected修饰,原因如下:

1)假设public接口I有一个protected方法M,那么位于其他包的public类C就可以实现这个接口(方法M依然是protected)。那么C的同包类D调用方法M只能这样访问:

C c = new C();
c.M();
无法这样访问:

I c = new C();
c.M();

如果接口I被多个类C1,C2...实现,其他类再根据不同情况来选择调用C1,C2,...的方法M时,就无法提供统一的接口了。本来这一用一个接口访问M方法,callM(I c),现在要根据不同的实现类C1,C2,...来提供多个接口。这样就失去了使用接口的重要意义:提供统一的接口,面向接口编程思想也无法体现。

(2)假设接口I是default的, 那么方法M是protected理论上是没有问题的,而且M也可以是default、public。至于为什么不让用protected:既然只能被本包中的类实现,其他包不能实现,这就失去了使用接口的重要意义:提供统一的接口。既然public既能被本包类访问,也能被其他包中的类访问,何乐不为呢。呵呵

(3)假设public接口I有一个default方法M, 那么位于其他包的无法正常实现接口I,因为方法M对其不可见。

(4)假设default接口I有一个default方法M,那么方法M是default理论上是没有问题的,而且M也可以是proteced、public。可能出于和(2)所说不能用protected的相同原因,不能使用default。



 

java基础--访问修饰符之我见

标签:存在   alt   protect   可见   面向   log   条件   面向接口   例子   

原文地址:http://www.cnblogs.com/lbkxx/p/javaModifiersOption.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!