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 有没有 私有类 一定有的

原文地址:https://www.cnblogs.com/aspirant/p/8759758.html