Java中private、protected、public和default的区别
区别:
public:可以被所有其他类所访问
private:只能被自己访问和修改
protected:自身、子类及同一个包中类可以访问
default:同一包中的类可以访问,声明时没有加修饰符,认为是friendly。
打个比方: PUBLIC相当于外人可以调用.private相当于只家庭内可以调用,protected相当于亲戚可以调用.
缺省的含义: 包内可以调用,即只要是同一个包内,都可以调用. 局限性比protected 大,比public 小. 从'外人'的角度看,类似于public,但又比public 多了个不伦不类的包限定.
我写了个例子:
package knowledge; public class PublicClass { private int public1; private int public2; private int age=12; //私有类 private class In{ public void print(){ System.out.println("I am private method "+age); } } protected class protectA{ public void printProtect(){ System.out.print("I am protected method "+age); } } public void outPrint(){ new In().print(); } }
package knowledge; public class ProtectedClass extends PublicClass { public ProtectedClass(){ super(); // super.outPrint(); // protectA protect1 =new protectA(); // protect1.printProtect(); } public void protectPrint(){ (new protectA()).printProtect();; } }
package knowledge_test; import knowledge.ProtectedClass; import knowledge.PublicClass; public class abc_test { public static void main(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=new ProtectedClass(); // // b.protectPrint(); // } } class MyObject{ MyObject object; }
注意:Java 类的内部可以有private 类:它用来完全隐藏实现的细节,也就是说我的心脏,只有我自己可以操作,别人都不行,
举个例子:
class Out { private int age = 12; private class In { public void print() { System.out.println(age); } } public void outPrint() { new In().print(); } } public class Demo { public static void main(String[] args) { //此方法无效 /* Out.In in = new Out().new In(); in.print(); */ Out out = new Out(); out.outPrint(); } }
如果一个内部类只希望被外部类中的方法操作,那么可以使用private声明内部类
上面的代码中,我们必须在Out类里面生成In类的对象进行操作,而无法再使用Out.In in = new Out().new In() 生成内部类的对象,也就是说,此时的内部类只有外部类可控制
如同是,我的心脏只能由我的身体控制,其他人无法直接访问它
参考:java内部私有类
参考:java 有没有 私有类 一定有的
本文来自博客园,作者:aspirant,转载请注明原文链接:https://www.cnblogs.com/aspirant/p/8759758.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?