zoukankan      html  css  js  c++  java
  • 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内部私有类

    参考:java 有没有 私有类 一定有的

  • 相关阅读:
    android data binding jetpack I 环境配置 model-view 简单绑定
    java 直接内存
    Android内存管理机制
    使用老版本的java api提交hadoop作业
    通过java api提交自定义hadoop 作业
    hadoop错误总结
    linux下eclipse闪退和重装jdk的方法
    完全分布式安装hadoop
    hadoop伪分布式安装
    2014年度总结
  • 原文地址:https://www.cnblogs.com/aspirant/p/8759758.html
Copyright © 2011-2022 走看看