private 与 public 定义

public(公有)和 private(私有)是 Java 中最核心的访问权限修饰符,用于控制方法(也可修饰属性、内部类)的可访问范围,是面向对象「封装」特性的核心实现手段。
简单理解:
public 方法 = 类对外公开的功能入口
private 方法 = 类内部自用的工具方法,对外完全不可见
公有方法(public)

  1. 定义方式
    在方法返回值类型前加上 public 关键字:
    java
    运行
    public 返回值类型 方法名(参数列表) {
    // 方法体
    }

  2. 核心特性
    全范围可见:任何位置都能调用 —— 同一个类内部、同一个包的其他类、不同包的普通类、不同包的子类,全部可以访问。
    核心作用:作为类对外暴露的官方功能入口,是外部代码和这个类交互的合法渠道。

  3. 典型应用场景
    类的核心业务方法,比如 withdraw() 取款、transfer() 转账
    属性的 getter / setter 方法,对外提供属性的读写入口
    接口、抽象类中定义的规范方法,实现类实现时通常保持 public
    私有方法(private)

  4. 定义方式
    在方法返回值类型前加上 private 关键字:
    java
    运行
    private 返回值类型 方法名(参数列表) {
    // 方法体
    }

  5. 核心特性
    仅本类可见:只能在当前类的内部被其他方法调用;类外部(哪怕是子类、同一个包的类)完全无法访问和调用。
    核心作用:封装内部实现细节,把复杂的公有方法拆分成多个小的私有方法,既提升代码可读性和复用性,又能隐藏内部逻辑,外部无需关心实现细节。

  6. 关键注意点
    私有方法不能被重写:子类根本无法访问父类的私有方法,即便子类写了同名方法,也只是子类自己的新方法,不属于方法重写。
    接口中不能定义私有抽象方法(接口方法默认是 public 抽象方法)。
    完整示例
    以 ATM 类为例,展示公有方法对外提供服务、私有方法内部处理细节:
    java
    运行
    public class ATM {
    // 公有方法:对外暴露的取款入口
    public void withdraw(int amount) {
    if (checkAmountValid(amount)) { // 调用内部私有校验方法
    dispenseMoney(amount); // 调用内部私有出钞方法
    System.out.println("取款成功");
    }
    }

    // 私有方法:内部金额校验,仅本类使用,外部不可见
    private boolean checkAmountValid(int amount) {
    return amount > 0 && amount % 100 == 0;
    }

    // 私有方法:内部出钞逻辑,仅本类使用
    private void dispenseMoney(int amount) {
    System.out.println("出钞:" + amount + "元");
    }
    }
    外部调用时,只能调用 withdraw(),无法直接调用两个私有方法,保证了内部逻辑的安全性和封装性。
    最佳实践(封装原则)
    属性私有化,功能公有化:属性全部用 private 修饰,对外通过 public 的 getter/setter 控制访问。
    最小暴露原则:只把必须对外提供的方法设为 public,所有内部辅助、工具方法一律设为 private,降低类之间的耦合度。
    外部只能通过 public 方法操作类,内部实现可以随意修改,不会影响外部调用代码。

posted on 2026-06-22 23:04  木木三。  阅读(18)  评论(0)    收藏  举报