private static和protected static与public static的用法及区别(Java)

更新时间:2023-05-25 21:55

其实,理解这两者的区别并不难,因为(public、private)和static这两种修饰符的作用本就不同,所以要理解两个的区别,其实就是这两种修饰符效果累加起来之后的区别。

static:静态修饰符,被static修饰的变量和方法类似于全局变量和全局方法,可以在不创建对象时调用,当然也可以在创建对象之后调用。常见的可以用于工具类的工具方法中等,譬如:Math类中的绝大多数方法都是静态方法,他们扮演了工具方法的作用。

public:声明当前被修饰的对象、方法、变量为公有的。这里的公有指的是可以被公有访问

private:声明当前被修饰的变量、方法为私有的。这里的私有指的是仅仅可以被私有访问

所以,被private static修饰的属性仅仅可以被静态方法调用,但是只能被本类中的方法(可以是非静态的)调用,在外部创建这个类的对象或者直接使用这个类访问都是非法的。被public static修饰的属性除了可以被静态方法和非静态调用之外,还可以直接被类名和外部创建的对象调用。

综上呢,private static是合法的,且有着其独到的用处:为当前类的静态方法提供私有静态属性。public static常用的是为该类提供对外暴露即可以被类名直接调用的静态常量。


protected static同理,
protected作用域:

  • 子类与基类在同一包中:被声明为 protected 的变量、方法和构造器能被同一个包中的任何其他类访问;

  • 子类与基类不在同一包中:那么在子类中,子类实例可以访问其从基类继承而来的 protected 方法,而不能访问基类实例的protected方法。

满足以上条件的同样可以访问.
注意php只有在当前类和子类中可以使用,不包括包.所以外部任何位置无法调用protected的static变量

总之九识访问范围修饰符同样限制static ,不要搞混 "访问控制"和 "static"的概念
  • default\ protected\ public\ private 限制的是访问范围
  • static 只是一个属于类的方法,不需要实例化而已