日期:2014-05-20  浏览次数:21470 次

java中是否有friendly和default修饰符?
我在一些java书籍中,偶尔看到这样的话:在没有修饰符的方法或类中,是一种默认的修饰符(用friendly或default修饰,这样的修饰符可以省略),我问我们老师他说在java中没有friendly这样的修饰符(老师说这是在c++中出现的),为什么有些书上是这样写的呢,谁说的话正确。如果有,他又什么样的作用。
还有那个default是怎么回事,我知道这个修饰符应该是正确的吧。它又有什么样的作用。是介于public和protected中间吗?


------解决方案--------------------
Java中所谓的“friendly”和“default”都只是一种说法,并不是说真有那么一个指定默认访问权限的关键字(default倒的确是个语言关键字,但那是用在switch语句中的,跟楼主的问题无关)。

Java中类的成员权限修饰符只有三个:public/private/protected。
当一个类的成员前面没有任何访问权限修饰符修饰时,我们就说他是“fiendly权限”,或者“default权限”(注意,只是这样“说”,并不是主你可以那样写上去)。这种说法指的就是那种可以从package内部或子类中访问的成员。

C++中也没有“friendly”,只有一个“friend”,但那是另一个意思。它虽然跟访问权限有点关系,但并不是一个访问权限修饰符,C++的权限修饰符也是只有那3种。而且C++默认的是private,这点也跟Java不一样。

C#倒是给另外一种“默认的”权限修饰符赋于了一个真正的语言关键字:internal。即写上internal跟不写是一个意思。
------解决方案--------------------
两者的修饰符不是同一个意思,书上的默认修饰符可以理解为访问权限,你们老师说的修饰符可以理解为修饰符关键字,两者不冲突,可以都认为是对的

默认修饰符就是不加任何修饰符,就是package的访问权限,即同一个包内可以访问,相当于c++里的friendly,
------解决方案--------------------
default 比 public 级别稍低,只能在自己的包里可见
public 可以在任何包里可见
protected 在任何包里的子类里可见
不能说介于两者之间,不过又都有可似性
至于friendly,java中确实没有,这也是为了更好体现类的封装性