java访问权限详解

java总共有四种种访问修饰符,按照权限的大小排名分别是:
public(公共的)–>protected(受保护的)–>友好的(默认修饰符)–>private(私有的)
其中友好的是java默认的修饰符,也就是当我们不写任何修饰符时则,默认为友好的。

针对类内每个成员的每个定义, Java 访问指示符 public, protected 以及 private 都置于它们的最前面— 无论它们是一个数据成员(变量),还是一个方法。每个访问指示符都只控制着对那个特定定义的访问,也就是说如果修饰的是类则控制着类的访问权限,如果修饰的是方法则控制着这个方法的访问权限。

public(公共的)
这是访问权限最宽松的,它就好比一个免费的公园,所有人都能进来,来者不拒。当一个类、方法或者数据成员被public修饰时,它能够被所有类及方法访问(包含不同包的类)。在java中我们对数据成员保密性要求较高,所以基本上不会用public修饰数据成员。
注意:同一个java源文件(同一个包名)中最多只能有一个public类,并且被public修饰的类名必须与文件名一致(包括大小写)。如果一个源文件中没有public类,则类名无需与源文件保持一致

protected(受保护的)
被protected修饰的属性以及方法只能被类本身的方法及子类访问,即使子类在不同的包中也可以访问,但它不能用来修饰类。所以当我们希望把某些东西隐藏起来,但允许它的衍生类(子类)访问时就可以用protected。

public class FatherClass {

    FatherClass(){
        System.out.println("父类的无参构造函数");
    }

    protected void method(){
        System.out.println("受保护的方法");
    }
}

class Son extends FatherClass{
    Son(){
        System.out.println("子类的无参构造函数");
    }

}

class Test1{
    public static void main(String[] args) {
        Son s =new Son();
        s.method();//访问父类的方法
    }
}

友好的(默认修饰符)
当一个类、方法及数据成员不添加任何修饰符时,则默认友好的。通常称为“默认访问权限“或者“包访问权限”。该模式下,只允许在同一个包中进行访问。例如上例中的Test1类就是友好的类。
private(私有的)
它是访问权限最窄的修饰符,被private修饰的属性以及方法只能被类本身的对象所访问,子类也不能访问,更不能跨包访问,但它不能用来修饰类。对于数据成员来说,我们一般都用private来修饰。虽然它是比较自私的,但作用还是比较重要的。例如:

class Sundae {
    private Sundae() {
    }

    static Sundae makeASundae() {
        return new Sundae();
    }
}
public class A {
    public static void main(String[] args) {
        // ! Sundae x = new Sundae();
        Sundae x = Sundae.makeASundae();
    }
}

这个例子向我们证明了使用 private 的方便:有时可能想控制对象的创建方式,并防止有人直接访问一个特定的构建器(或者所有构建器)。在上面的例子中,我们不可通过它的构建器创建一个Sundae 对象(即new Sundae());相反,必须调用 makeASundae()方法来实现。另外我们将无参构造函数用private修饰时,可以防止被其他类继承。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值