首先声明:java中,friendly这个修饰符并没有显式的声明,在成员变量和方法前什么修饰符也不用,默认的就是friendly。 为了条理清晰,分三种不同情况来总结。# ~' T: {/ W2 W- c T- U
一 访问权限修饰符修饰成员变量和方法 A1 J R. ~3 H: `1 v; e m
public:表明该成员变量和方法是共有的,能在任何情况下被访问。 |! m0 S( B9 R5 e( F7 p; n
protected:必须在同一包中才能被访问。(说的比较简单,看个例子就明白了)( V' D7 Q4 _+ ^& l1 D) [
Java代码
8 }$ s' G6 I4 H" b( c class A
4 R; L3 C/ U- ^ {0 ~; j- }: G7 |' r/ ^* U5 H/ Z+ J# Y
protected int weight ;
$ }" e5 K6 H' O4 k protected int f( int a,int b )
2 O7 i6 V$ L8 q6 g {# ^- B/ A( u9 `, w. W
// 方法体, f4 B9 b7 J+ F
}
, X5 x1 W! q# D ? }, z6 F) L* |7 u! H' W3 h) G
假设B与A在同一个包中,则
* a7 H& E; B" D2 ^ Java代码& }6 P' H- e, m
class B
" p- j% T1 u2 z9 Z5 C# y, M/ a5 D- U5 e- ~ {
+ T' m) Z4 e4 g. C void g()9 Q% S$ d$ X1 e
{
/ g' }5 R9 t, g) v9 u. z/ ^6 @ A a=new A();, Y/ I* r$ @$ N1 t. V
A.weight=100;//合法4 J7 ?2 V3 t9 w' \ \3 h% E/ a* P
A.f(3,4); //合法
. `# E5 G8 l! u$ `) } }
) K. g$ b/ O9 V: q }
8 L8 f+ n* O2 N$ F. a+ ?) j/ U 特别说明:什么是在同一个包中?
+ z3 w& ^) P7 C% w 答:用package打包在一起的class ,叫在同一个包中。(不明白,举个例子)
+ |" H5 O( e6 ?" W4 l eg:在JDK的src\java\io中,你会看到许多java类,第一句源代码都是package java.io;
% e( P3 z$ s' i4 C0 A# _ 没有使用package打包的,在同一目录下的类也会被视做同一个包。
! H8 e* g8 j' n+ U2 t$ | friendly:在这种情况下中,同protected。区别在第二和第三种情况中。
3 n+ A% |5 e1 C8 O9 z Java代码
" H9 C' G* y! ~) O/ W class A
, c& A6 I9 o% [. C: i {
9 d; M! [$ F! [# t* V0 W int weight ;
. ^4 F! v/ g, ?- d( M% D$ i; J int f( int a,int b )
! i- \4 K/ v3 ]) l1 u& ? {5 e- n' k; s2 d+ _
// 方法体
# S- G, J: F0 A }3 a' ^: v% b! L- x. ]
} |