关于Java访问控制

这篇文章是《西雅图咨询公司2021年圣诞日历》的第五天文章。
大家好,我是西雅图咨询的小泉。

首先

我总结了关于学习编程初期遇到的访问控制困难。我为初学者编写了这个,所以如果你想了解访问控制,请务必利用它。

终点

能够理解访问修饰符的作用和使用场景。

对于字段和方法的访问控制

在Java中,您可以对每个字段和方法进行访问控制。
它具有从以下4个级别中选择访问控制级别的机制。

制限のレベル 名称   指定方法 アクセスを許可する範囲 制限が厳しい private private 自分自身のクラスのみ ⬆︎ package private なし(何も書かない) 自分と同じパッケージに属するクラス ⬇︎ protected protected 自分と同じパッケージに属するか、自分を継承した子クラス 制限が緩い public public 全てのクラス

请注意:在类的访问控制和方法以及字段的访问控制中,我们将优先考虑限制更严格的那一方。

使用实例(公共和私人)

这次我们将解释常见的public和private的用法示例。

public和private是修饰符,用于确定其所附加的元素(类、字段、方法、构造函数)的可见性。public具有“公开”的意思,使用public修饰的元素可以从任何地方(即所有类)访问。
相反,还有一个名为private的修饰符。这个修饰符可以用于字段、方法和构造函数,但是使用private修饰的元素无法被其他类引用。
例如,考虑以下类:

public class Rectangle {

    private double width;

    private double height;

    public Rectangle(double w, double h) {
        this.width = w;
        this.height = h;
    }

    public double area() {
        return this.width * this.height;
    }
}

创建如上所述的类时,可以从其他类访问具有public修饰符的构造函数和area方法。

// 他のクラス
public class RectangleAction1 {
    public static void main(String[] args) {

        Rectangle r = new Rectangle(1.0, 2.0);
        //                              --OK

        System.out.println("area = " + r.area());
        //                              --OK
    }
}

然而,对于标有 private 的 double 类型的字段 height,无法从其他类进行访问。

// 他のクラス
public class RectangleAction2 {
    public static void main(String[] args) {

        Rectangle r = new Rectangle(1.0, 2.0);
        //                             --OK

        // private なのでどちらもコンパイルエラー
        r.width = 3.0;
        r.height = 4.0

        System.out.println("area = " + r.area());
        //                             --OK
    }
}

如果使用private关键字,有一个好处是“不会被意外地修改希望保持不变的信息”,另外,如果不小心尝试修改,编译错误会让你知道这是程序错误,不需要再额外运行程序来确认。

但是,private关键字也允许在同一类中读取和修改信息。

public class Rectangle {

    private double width;

    private double height;

    public Rectangle(double w, double h) {
        // 自分のクラスからは書き込めます
        this.width = w;
        this.height = h;
    }

    public double area() {
        // 自分のクラスからは読み出せます
        return this.width * this.height;
    }
}

最后

通过了解访问控制,可以防止恶意或错误的使用。我认为这对于进行开发来说是必要的知识,希望这篇文章对大家有所帮助。

bannerAds