java 中public protected default private

访问权限

  • 类中被public修饰的字段、方法:可以被该类的 实例、子类(无论子类和父类是否在同一个包中) 访问。
  • 类中被protected修饰的字段、方法:可以被该类的 同一包的实例、子类(无论子类和父类是否在同一个包中) 访问。
  • 类中被default修饰的字段、方法:可以被该类的 同一包的实例、子类(子类父类在同一个包中) 访问。
  • 类中被private修饰的字段、方法:可以被该类自己访问。
  • 总结下:
    • public:所有可见
    • protected:包可见、子类、自己可见
    • default:包、自己可见
    • private:自己可见
package com.dr.java.packagetest.package1;

public class SamePackage {

    public void printPublic(){
        System.out.println("public method");
    }

    void printDefault(){
        System.out.println("default method");
    }

    protected void printProtected(){
        System.out.println("protected method");
    }

    private void printPrivate(){
        System.out.println("private method");
    }

    private void test(){
//        在同一个类里:public protected default private都可以访问
        this.printPublic();
        this.printProtected();
        this.printDefault();
        this.printPrivate();
    }
}
package com.dr.java.packagetest.package1;

import com.dr.java.packagetest.package2.OtherPackage;

public class MainClass {

    public static void main(String[] args){
        //        在相同的包中,实例化一个类:public default protected 可以访问,private不能访问
        SamePackage samePackage=new SamePackage();
        samePackage.printPublic();
        samePackage.printProtected();
        samePackage.printDefault();
//        samePackage.printPrivate();

//        在不同的包中,实例化一个类:public可以访问,default protected private 不能访问
        OtherPackage otherPackage =new OtherPackage();
        otherPackage.printPublic();
//        otherPackage.printProtected();
//        otherPackage.printDefault();
//        otherPackage.printPrivate();
    }
}
package com.dr.java.packagetest.package1;

import com.dr.java.packagetest.package2.OtherPackage;

public class ExtendOtherPackage extends OtherPackage {

    public void test(){

//        在不同包里,继承一个类:该类中的public protected可以访问,default private不能访问
        super.printPublic();
        super.printProtected();
//        super.printDefault();
//        super.printPrivate();
    }
}
package com.dr.java.packagetest.package1;

public class ExtendSamePackage extends SamePackage {

    public void test(){
//        在同一个包里,继承一个类:该类中的public protected default 可以访问,private不能访问
        this.printPublic();
        this.printDefault();
        this.printProtected();
//        this.printPrivate();
    }
}
package com.dr.java.packagetest.package2;

public class OtherPackage {

    public void printPublic(){
        System.out.println("public method");
    }

    void printDefault(){
        System.out.println("default method");
    }

    protected void printProtected(){
        System.out.println("protected method");
    }

    private void printPrivate(){
        System.out.println("private method");
    }
}

猜你喜欢

转载自blog.csdn.net/designer01/article/details/82632152