为什么允许静态方法调用私有方法?

Nik*_*sov 2 java static encapsulation private

我之前从未尝试过编写以下代码,因为它在生产中没有多大意义.但令我惊讶的是,这段代码成功编译.为什么它被设计为允许在同一个类的实例上从静态方法调用私有方法?

public class Beverage {
    private void drink () {
        System.out.println("Beverage");
    }

    public static void main (String[] args) {    
        Beverage b = new Beverage();
        b.drink(); //call to private method!
    }
}
Run Code Online (Sandbox Code Playgroud)

JB *_*zet 6

他们为什么不能打电话给他们?private限制访问同一个类.静态方法属于同一类.所以它可以访问私有方法.

访问修饰符在类级别工作,而不是在实例级别.它们在实例级别工作,您无法编写静态工厂方法(调用私有构造函数和初始化方法),equals()方法和compareTo方法(比较两个实例的私有字段)等.