java中public、private、protected、不写的区别

前言:在java编程中变量和方法前我们通常要加修饰词来标识他的一个作用范围。常用的有四种,我们要灵活使用,这样才能设计出更健壮、易扩展的代码。


  1. public:
    ①具有最大的访问权限,可以访问任何一个在classpath下的类、接口、异常等。它往往用于对外的情况,也就是对象或类对外的一种接口的形式。(我们可以通过get方法访问,也可以对象.属性名来访问)
  2. private:
    ①类的创建者和内部方法使用(注意只能是本类,不是本对象),内部类也无法使用

  3. protected:
    ①子类可以访问protected修饰的变量和方法。(只要是子类,即使不同包)。②同包中可以访问protected。

  4. 不写:
    ①声明时没有加修饰符,认为是friendly修饰,包内部访问。

测试代码

/**
 * 父类
 * 
 * @author lijianbo
 *
 */
public class Parent {
    // 任何地方都可以访问
    public String publicName;
    // 只能类本身使用,对象都无法使用,内部类也无法使用
    private String privateStr = "privateStr";
    // 受保护的方法,只能在本类,同包,子类中访问
    protected String protectedStr = "protectedStr";
    // 不写修饰符,同包中访问
    String noDeclarationStr = "没有修饰符修饰的Str";

    public String getPublicName() {
        return publicName + getPrivateStr();
    }

    public void setPublicName(String publicName) {
        this.publicName = publicName;
    }

    private String getPrivateStr() {
        return privateStr;
    }

    protected String getProtectedStr() {
        return protectedStr;
    }

}

// 内部类
class InnerClass {
    public static void main(String[] args) {
        // getPrivateStr(); error 内部类也无法访问私有的
    }

}
/**
 * 子类
 * 
 * @author lijianbo
 *
 */
public class Sun extends Parent {

    // protected 修饰的可以使用
    public String getName() {
        return protectedStr;
    }

    public String getName2() {
        return getProtectedStr();
    }

}
/**
 * 测试public、private、protected、不写修饰符
 * 
 * @author lijianbo
 *
 */
public class authorityTest {
    public static void main(String[] args) {
        /*
         * public 修饰的项目中任何地方都可以访问
         */
        Parent parent = new Parent();
        parent.setPublicName("public名字");
        String publicName = parent.getPublicName();
        System.out.println(publicName);

        // 对象.属性名
        String publicName2 = parent.publicName;
        System.err.println(publicName2);

        /*
         * protected 同包可以访问
         */
        parent.getProtectedStr();
        System.out.println("--------------------");

        // 子类中可以获取父类的protect方法、属性(即时不同包可以访问)
        Sun sun = new Sun();
        String protectedStr1 = sun.protectedStr;
        System.out.println(protectedStr1);
        String protectedStr2 = sun.getProtectedStr();
        System.out.println(protectedStr2);

        /*
         * 没有修饰符修饰,认为是friendly修饰,同包访问
         */
        String noDeclarationStr = parent.noDeclarationStr;
        System.err.println(noDeclarationStr);
    }

}

打印结果为:
public名字privateStr
public名字


protectedStr
protectedStr
没有修饰符修饰的Str

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值