权限修饰符有 privatedefaultprotectedpublic 四种,各自作用的范围不同。其中privatedefaultprotectedpublic 四种都可以修饰属性和方法,而只有 defaultpublic 可以修饰类。

  • private :仅在当前类中可以访问

    public class A{
        private int age;
        public void eat(){
            System.out.println(age);
            age = 10;
        }
    }
    
  • default :缺省(默认)修饰符,省略不写,写了反而会报错。在同一个包下的其他类都可以访问。

    public class A{
        int age; // 省略default
        public void eat(){
            System.out.println(age);
            age = 10;
        }
    }
    public class Test{
        public static void main(String[] args){
            A a = new A();
            a.age = 100;
        }
    }
    
  • protected :最大到不同包下的子类可以访问(自然也可以被同一包中的其他类访问,都无需使用该成员所在类的对象进行访问)

    package com.test1;
    
    public class A{
        protected int age; // 省略default
        public void eat(){
            System.out.println(age);
            age = 10;
        }
    }
    
    package com.test2;
    
    public class B extends A{
        public void a(){
            System.out.println(age);
        }
    }
    
  • public :在整个项目中都可以访问

总的来说,四个权限修饰符的作用范围可以用下表表示:

同一个类 同一个包 子类 所有类
private
default
protected
public

所以以后写代码时一般用 private 修饰属性,用 public 修饰方法和类。