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 @ 2022-09-24 12:00  LCAC  阅读(55)  评论(0)    收藏  举报