Java修饰符分为:1.访问修饰符    2.非访问修饰符
用来修饰类、方法或变量。

1.访问修饰符:
有public、default、protected、private四种

  1. public:任何其他类可见。
  2. default:包内可见,包外不可见。接口里的变量都隐式声明为 public static final,而方法默认为public
  3. protected:包内可见,包外继承子类可见。 不能修饰类(内部类除外)。接口以及接口的成员变量和方法都不能声明为protrcted
  4. private:包内同类可见。

 访问控制和继承

  • 父类中声明为public的方法,在子类也必须声明为public
  • 父类中声明为protected的方法,在子类中只能声明为public或protected, 不能声明为private。
  • 父类中声明为private的方法,不能被继承。

2.非访问修饰符
有static、final、abstract、synchronize和volatile 五种。

  1. static:修饰的变量为静态变量,修饰的方法为静态方法。
    静态变量:无论类被实例化多少次,类的静态变量只有一份。局部变量不能声明为静态变量。
    静态方法:静态方法不能调用非静态变量。
    [注:]明白一点,就是静态的属于整个类所有,非静态的属于具体对象所自有,静态方法不能调用非静态变量,因为jvm加             载类的时候会初始化静态变量和静态方法,而此时没有百对象的存在,所度以此时会有类似于空指针异常的错误
  2. final:修饰的类不能被继承;修饰的方法不能被继承重写;修饰的变量为常量,不能改变。
  3. abstract:修饰的类为抽象类,修饰的方法为抽象方法。
    抽象类:抽象类不能用来实例化对象,声明抽象类的唯一目的是将来对该类进行扩充;类不能同时被abstract和final修饰;                包含抽象方法的类必须声明为抽象类;抽象类可以包含抽象方法和非抽象方法。
    抽象方法:抽象方法没有具体实现功能,具体实现方法由子类完成。
  4. synchronize:被修饰的方法,同一时间只能被一个线程访问。
  5. volatile:告诉编译器,被修饰的变量是随时可以变化的,该变量的值的每一次改变,其他使用到的线程都可以立刻知道。

抽象类和接口的区别:

  • 抽象类中可以有抽象方法和普通方法,接口中只能有抽象方法
  • 抽象类中可以有构造方法,接口中没有构造方法
  • 抽象类中可以有普通变量,接口中只能有public 常量
  • 抽象类只能单继承类,接口可以继承多个接口(interface xxx extends A,B,C{})
  • 实现类只能继承一个抽象类,但是可以实现多个接口