java public、protected、default、private

java 的访问控制符为了控制类还有类对应方法的访问做限制。

如上的图表总结了类方法的访问控制范围,其实类的访问控制范围也是类似的情况。声明为public则不管外部包还是内部都能够访问,如果为default则只能本包内能够访问

关于类方法的访问范围,我们比较熟悉的是private还有public,private只有本类的内部才能访问而public则到处都能访问

这里主要聊的是default和protected

 

一、default

我们的访问限制中没有default这个关键字,但是我们没有写public、protected、default或者private则表示为default

复制代码
package com.example.exampletest.testvisit;

public class TestVisit {
    public void printPublic() {
        System.out.println("TestVisit:printPublic");
    }
    protected void printProtected() {
        System.out.println("TestVisit:printProtected");
    }
    void printDefault() {
        System.out.println("TestVisit:printDefault");
    }
    private void printPrivate() {
        System.out.println("TestVisit:printPrivate");
    }
}
复制代码

如上的printDefault函数可以在包路径为com.example.exampletest.testvisit 中的其他类中访问的到

那么假设有一个包名为:com.example.exampletest.testvisit.nextfold 中的类是不能访问到TestVisit 中的printDefault函数

 

二、protected

在同一个包中,访问范围跟default一样就不赘述;这里主要讲不同包之间的访问

package com.example.exampletest;

class TryVisits extends TestVisit {
    void printVisit() {
        this.printPublic();
        this.printProtected();
    }
}

在包com.example.exampletest中有类TryVisits 继承TestVisit,TryVisits作为TestVisit的子类,虽然跟TryVisits不在同一个包中,但是依旧能够访问的到printProtected

复制代码
package com.example.exampletest;

public class HelloWorld {
    private void testVisits() {
        TryVisits visits = new TryVisits();
        visits.printPublic();
//        visits.printProtected(); // 访问不到
    }
}
复制代码

如上在跟TryVisits同一个包中的HelloWorld类new出来的TryVisits也是不能访问TryVisits的父类的成员函数printProtected,因为HelloWorld既不是TestVisit的子类也不是跟TestVisit在同一个包中。

 

posted @   LCAC  阅读(37)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
点击右上角即可分享
微信分享提示