封裝的實現(訪問控制符的使用):
Java通過使用訪問控制符來控制那些細節需要封裝,那些細節需要暴露。
4種訪問控制符分別爲:private,default,protected,public,說明對象的封裝性,通過他們可以儘可能的將訪問權限放到最低,從而提高安全性。
修飾符 同一個類 同一個包 子類 所有類
private *
default * * (同包中的子類之所以可以訪問是因爲顯示同包)
protected * * *
public * * * *
說明:
1、 private表示私有,只可以自己的類中訪問
2、 default表示沒有修飾符號,同一個包裏的類可以訪問
3、 protected表示受保護的,同包的類和其他包中的子類也可以訪問
4、 public表示公開的,所有包中所有類可以訪問
注意:訪問方式分爲“類名.”或者“實例.”的形式,具體的使用參照具體情況。(一般用“實例.”的形式,類名.一般是靜態成員和方法)
代碼區分
package com.it.package1;
public class ClassOne {
private int privateProp;
int defaultProp;
protected int protectedProp;
public int publicProp;
void testSameClass(){
privateProp = 0;
defaultProp = 0;
protectedProp = 0;
publicProp = 0;
}
}
package com.it.package1;
public class ClassOneStatic {
private static int privateProp;
static int defaultProp;
static protected int protectedProp;
static public int publicProp;
void testSameClass(){
privateProp = 0;
defaultProp = 0;
protectedProp = 0;
publicProp = 0;
}
}
package com.it.package1;
public class ClassTwo{
void testdifferentClass() {
// new ClassOne().privateProp;
new ClassOne().defaultProp = 1;
new ClassOne().protectedProp = 1;
new ClassOne().publicProp = 1;
// ClassOneStatic.privateProp;
ClassOneStatic.defaultProp = 1;
ClassOneStatic.protectedProp = 1;
ClassOneStatic.publicProp = 1;
}
}
package com.it.package1;
public class ClassChild extends ClassOne{
void testChild() {
// privateProp = 1 ;
defaultProp = 1;
protectedProp = 1;
publicProp = 1;
}
}
package com.it.package2;
import com.it.package1.ClassOne;
import com.it.package1.ClassOneStatic;
public class ClassFour {
void testDifferentPackage(){
// new ClassOne().privateProp;
// new ClassOne().defaultProp = 1;
// new ClassOne().protectedProp = 1;
new ClassOne().publicProp = 1;
// ClassOneStatic.privateProp = 1;
// ClassOneStatic.defaultProp = 1;
// ClassOneStatic.protectedProp = 1;
ClassOneStatic.publicProp = 1;
}
}
package com.it.package2;
import com.it.package1.ClassOneStatic;
public class ClassChild extends ClassOneStatic {
void testdifferentPackageChild() {
// ClassOneStatic.privateProp = 1;
// ClassOneStatic.defaultProp = 1;
ClassOneStatic.protectedProp = 1;
ClassOneStatic.publicProp = 1;
}
}