Java访问修饰符详解:private、package-private、protected和public的区别

在Java中,成员变量(也称为字段或属性)可以使用 privatepackage-private(不写修饰符)、protectedpublic 四种访问修饰符来修饰。这些修饰符决定了成员变量的可见性和访问权限。以下是它们之间的区别:

访问修饰符类内部同一包内子类(不同包)任何地方
private
默认
protected
public

1. private

  • 可见性:仅在声明该成员变量的类内部可见。
  • 访问权限:只有该类内部的方法可以访问和修改该成员变量。
  • 用途:通常用于封装数据,防止外部直接访问和修改,提高代码的安全性和可维护性。
public class MyClass {
    private int privateField;

    public void setPrivateField(int value) {
        this.privateField = value;
    }

    public int getPrivateField() {
        return this.privateField;
    }
}

2. package-private(不写修饰符)

  • 可见性:在同一个包(package)内可见。
  • 访问权限:同一个包内的类可以访问和修改该成员变量。
  • 用途:适用于包内共享的成员变量,但不适合跨包访问。
package mypackage;

public class MyClass {
    int packagePrivateField; // 不写修饰符,默认为package-private
}

3. protected

  • 可见性:在同一个包内可见,并且在不同包的子类中可见。
  • 访问权限:同一个包内的类和不同包的子类可以访问和修改该成员变量。
  • 用途:适用于需要被子类访问的成员变量,同时限制外部包的访问。
package mypackage;

public class MyClass {
    protected int protectedField;
}

// 不同包的子类
package anotherpackage;

import mypackage.MyClass;

public class SubClass extends MyClass {
    public void accessProtectedField() {
        this.protectedField = 10; // 可以访问
    }
}

4. public

  • 可见性:在任何地方都可见。
  • 访问权限:任何类都可以访问和修改该成员变量。
  • 用途:适用于需要公开访问的成员变量,但应谨慎使用,以避免破坏封装性。
public class MyClass {
    public int publicField;
}

// 其他类中
public class AnotherClass {
    public void accessPublicField() {
        MyClass obj = new MyClass();
        obj.publicField = 20; // 可以访问
    }
}

总结

  • private:仅在类内部可见,用于封装。
  • package-private:在同一个包内可见,适用于包内共享。
  • protected:在同一个包内和不同包的子类中可见,适用于子类访问。
  • public:在任何地方都可见,适用于公开访问,但应谨慎使用。

选择合适的访问修饰符可以提高代码的封装性和安全性,同时也有助于代码的可维护性和扩展性。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值