侧边栏壁纸
  • 累计撰写 47 篇文章
  • 累计创建 0 个标签
  • 累计收到 39 条评论

目 录CONTENT

文章目录

Java 四种访问控制符

在Java中,有四种访问控制符,它们分别是publicprotecteddefault(包级私有,未使用任何修饰符)、private。每种访问控制符决定了类、变量、方法和构造函数的可见性和访问权限。下面详细介绍每种访问控制符的作用范围和使用场景:

1. public

  • 作用范围public修饰的成员可以被任何其他类访问,不论它们是否在同一个包中。
  • 使用场景
    • 公共的API方法和类:希望被所有其他类使用的功能性方法和类。
    • 常量:需要全局访问的常量通常被声明为public且是static final
public class Example {
    public int publicVar = 10;

    public void publicMethod() {
        System.out.println("This is a public method.");
    }
}

// 其他类访问
class Test {
    public static void main(String[] args) {
        Example example = new Example();
        System.out.println(example.publicVar); // 访问public变量
        example.publicMethod(); // 调用public方法
    }
}

2. private

  • 作用范围private修饰的成员只能在它们所在的类内部访问,不能在类外部访问,即使是在同一个包中。
  • 使用场景
    • 封装:隐藏类的实现细节,防止外部直接访问类的内部数据。
    • 内部方法和变量:只在类内部使用的方法和变量。
public class Example {
    private int privateVar = 10;

    private void privateMethod() {
        System.out.println("This is a private method.");
    }

    public int getPrivateVar() {
        return privateVar;
    }

    public void setPrivateVar(int privateVar) {
        this.privateVar = privateVar;
    }
}

// 其他类访问
class Test {
    public static void main(String[] args) {
        Example example = new Example();
        // System.out.println(example.privateVar); // 错误:private变量无法访问
        System.out.println(example.getPrivateVar()); // 通过public方法访问private变量
    }
}

3. protected

  • 作用范围protected修饰的成员可以在同一个包中的其他类以及不同包中的子类访问。
  • 使用场景
    • 继承:希望子类能访问的成员。
    • 同包访问:希望同一个包中的其他类也能访问的成员。
public class Example {
    protected int protectedVar = 10;

    protected void protectedMethod() {
        System.out.println("This is a protected method.");
    }
}

// 同一个包中的其他类访问
class Test {
    public static void main(String[] args) {
        Example example = new Example();
        System.out.println(example.protectedVar); // 访问protected变量
        example.protectedMethod(); // 调用protected方法
    }
}

// 不同包中的子类访问
package different;

import Example;

public class SubExample extends Example {
    public void accessProtected() {
        System.out.println(protectedVar); // 访问protected变量
        protectedMethod(); // 调用protected方法
    }
}

4. default(包级私有)

  • 作用范围:未使用任何访问控制修饰符(即“默认”访问级别)修饰的成员只能在同一个包中的其他类访问。
  • 使用场景
    • 包级访问:希望同一个包中的其他类能访问,但不同包中的类不能访问。
class Example {
    int defaultVar = 10; // 默认访问级别

    void defaultMethod() {
        System.out.println("This is a default method.");
    }
}

// 同一个包中的其他类访问
class Test {
    public static void main(String[] args) {
        Example example = new Example();
        System.out.println(example.defaultVar); // 访问default变量
        example.defaultMethod(); // 调用default方法
    }
}

// 不同包中的类无法访问
package different;

import Example;

public class DifferentClass {
    public void accessDefault() {
        Example example = new Example();
        // System.out.println(example.defaultVar); // 错误:default变量无法访问
        // example.defaultMethod(); // 错误:default方法无法访问
    }
}

总结

  • public:

    • 作用范围:任何地方都可以访问。
    • 使用场景:公共API、常量、希望全局访问的类和方法。
  • private:

    • 作用范围:只能在类内部访问。
    • 使用场景:封装内部数据和方法。
  • protected:

    • 作用范围:同一个包中的其他类和不同包中的子类可以访问。
    • 使用场景:继承中使用,允许子类访问的成员。
  • default(包级私有):

    • 作用范围:同一个包中的其他类可以访问。
    • 使用场景:包级访问,隐藏实现细节但允许包内共享。
0

评论区