封装的实现(访问控制符的使用):
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;
}
}