区别:
public:可以被所有其他类所访问
private:只能被自己访问和修改
protected:自身、子类及同一个包中类可以访问
default:同一包中的类可以访问,声明时没有加修饰符,认为是friendly。
打个比方: PUBLIC相当于外人可以调用.private相当于只家庭内可以调用,protected相当于亲戚可以调用.
缺省的含义: 包内可以调用,即只要是同一个包内,都可以调用. 局限性比protected 大,比public 小. 从'外人'的角度看,类似于public,但又比public 多了个不伦不类的包限定.
我写了个例子:
packageknowledge;public classPublicClass {private intpublic1;private intpublic2;private int age=12;//私有类
private classIn{public voidprint(){
System.out.println("I am private method "+age);
}
}protected classprotectA{public voidprintProtect(){
System.out.print("I am protected method "+age);
}
}public voidoutPrint(){newIn().print();
}
}
packageknowledge;public class ProtectedClass extendsPublicClass {publicProtectedClass(){super();//super.outPrint();//protectA protect1 =new protectA();//protect1.printProtect();
}public voidprotectPrint(){
(newprotectA()).printProtect();;
}
}
packageknowledge_test;importknowledge.ProtectedClass;importknowledge.PublicClass;public classabc_test {public static voidmain(String[] args) {//TODO Auto-generated method stub//MyObject object1=new MyObject();//MyObject object2=new MyObject();//
//object1.object=object2;//object2.object=object1;//
//object1=null;//object2=null;
PublicClass a=new PublicClass(); //不同的包可以访问
a.outPrint();
ProtectedClass b=newProtectedClass();//
//b.protectPrint();//
}
}classMyObject{
MyObject object;
}
注意:Java 类的内部可以有private 类:它用来完全隐藏实现的细节,也就是说我的心脏,只有我自己可以操作,别人都不行,
举个例子:
classOut {private int age = 12;private classIn {public voidprint() {
System.out.println(age);
}
}public voidoutPrint() {newIn().print();
}
}public classDemo {public static voidmain(String[] args) {//此方法无效
/*Out.In in = new Out().new In();
in.print();*/Out out= newOut();
out.outPrint();
}
}
如果一个内部类只希望被外部类中的方法操作,那么可以使用private声明内部类
上面的代码中,我们必须在Out类里面生成In类的对象进行操作,而无法再使用Out.In in = new Out().new In() 生成内部类的对象,也就是说,此时的内部类只有外部类可控制
如同是,我的心脏只能由我的身体控制,其他人无法直接访问它