Jupyter AI

27 面向对象编程基础之访问控制修饰符

📅 发表日期: 2024年8月10日

分类: Java 入门

👁️阅读: --

在Java中,面向对象编程是核心思想之一,而访问控制修饰符则是实现这一思想的关键部分之一。通过合理使用访问控制修饰符,我们可以有效地保护类的数据成员不被非法访问,从而提高程序的安全性和可维护性。

访问控制修饰符类型

Java中主要有四种访问控制修饰符,它们分别是:

  1. public:公共访问修饰符,成员可以被任何其他类访问。
  2. protected:受保护访问修饰符,成员可以被同一个包中的类以及所有子类访问。
  3. default:默认访问修饰符,如果没有指定修饰符,默认是包级访问,成员可以被同一个包中的类访问。
  4. private:私有访问修饰符,成员只能被同一个类访问。

接下来,我们将详细探讨每种修饰符的使用及其影响。

1. public 修饰符

使用 public 修饰符的成员可以被任何其他类访问。

public class PublicExample {
    public int publicVariable = 10;

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

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

在上述示例中,publicVariablepublicMethod 可以被 Test 类直接访问。

2. protected 修饰符

protected 修饰符可以在同一包中的类以及所有子类中访问。

class ProtectedExample {
    protected int protectedVariable = 20;

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

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

class Test {
    public static void main(String[] args) {
        SubExample example = new SubExample();
        example.display(); // 可以通过子类访问protected成员
    }
}

在这个例子中,protectedVariableprotectedMethod 可以被 SubExample 访问,但不能被其他包中的类直接访问。

3. default 修饰符

当一个类的成员没有修饰符时,即是使用了默认访问级别,只能在同一个包中访问。

class DefaultExample {
    int defaultVariable = 30; // 默认访问权限

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

class Test {
    public static void main(String[] args) {
        DefaultExample example = new DefaultExample();
        System.out.println(example.defaultVariable); // 访问default变量
        example.defaultMethod(); // 调用default方法
    }
}

在这个示例中,defaultVariabledefaultMethod 可以在同一个包中的类中访问,但如果想从不同包访问时就不可行了。

4. private 修饰符

private 修饰符使得成员只能被定义它的类访问。

class PrivateExample {
    private int privateVariable = 40;

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

    public void accessPrivate() {
        System.out.println(privateVariable); // 通过公有方法访问私有变量
        privateMethod(); // 通过公有方法调用私有方法
    }
}

class Test {
    public static void main(String[] args) {
        PrivateExample example = new PrivateExample();
        example.accessPrivate(); // 访问私有成员的方法
        // System.out.println(example.privateVariable); // 访问不到,会报错
    }
}

在这个示例中,privateVariableprivateMethod 无法被其他类直接访问,只有通过 accessPrivate 方法才能访问。

访问控制的总结

通过上述例子,我们可以总结出每种修饰符的访问规则及其适用场景:

  • 使用 public 修饰符时,成员对所有类可见,适合于 API 接口。
  • 使用 protected 修饰符时,成员仅对同包类和子类可见,适合于继承。
  • 使用 default 修饰符时,成员仅对同包类可见,适合于包内部逻辑。
  • 使用 private 修饰符时,成员仅对类内部可见,适合于隐藏实现细节,增强封装性。

结语

了解和合理使用访问控制修饰符是进行面向对象编程的基础之一。通过控制访问权限,可以保护数据,并确保类的封装性。在接下来的章节中,我们将探讨Java中常用的类,字符串类的使用及其特性。