Java 修饰符

访问修饰符

公有访问修饰符-public

  • 对所有类可见。
  • 使用对象:类、接口、变量、方法。
  • 父类中声明为 public 的方法在子类中也必须为public。
public class Demo; 
public  int num = 1; 
public void getName( ){
}

默认访问修饰符

  • 使用对象:类、接口、变量、方法。
class Demo
{
    int num = 1; 
    void getName( ){ 
    }
}

受保护的访问修饰符-protected

  • 使用对象:变量,构造方法,方法成员,不能修饰类(内部类除外)。
  • 注意:
  1. 父类中声明为 protected 的方法在子类中要么声明为 protected,要么声明为 public,不能声明为 private。
  2. 子类与父类在同一包中:被声明为 protected 的变量、方法和构造函数(构造器)能被同一个包中的任何其他类访问;
  3. 子类与父类不在同一包中:那么在子类中,子类实例可以访问其从父类继承而来的 protected 方法,而不能访问父类实例的protected方法。
class Test {
   protected  getNamer() {
      // 实现细节
   }
}
class Test1 extends Test {
 protected  getNamer() {
      // 实现细节
   }
}

私有访问修饰符-private

  • 在同一类内可见。
  • 使用对象:变量、方法。
  • 主要用来隐藏类的实现细节和保护类的数据。
  • 只能通过类中公共的 getter 方法被外部类访问。
  • 父类中声明为 private 的方法,不能够被继承。
class Logger {
   private String format;
   public String getFormat() {
      return this.format;
   }
   public void setFormat(String format) {
      this.format = format;
   }
}
class Name{
    public static void main(Sting[] args){
        Logger name = new Logger(a);
        System.out.println(name.getFormat());
    }
}

访问权限

修饰符 当前类 同一包内 子类 其他包
public 可访问 可访问 可访问 可访问
protected 可访问 可访问 可访问 不可访问
default 可访问 可访问 不可访问 不可访问
private 可访问 不可访问 不可访问 不可访问

非访问修饰符

static 修饰符

静态变量(类变量):

  • 用来声明独立于对象的静态变量,无论一个类实例化多少对象,它的静态变量只有一份拷贝。
  • 局部变量不能被声明为静态变量。

静态方法:

  • 用来声明独立于对象的静态方法。
  • 静态方法只能使用静态变量。
class Demo
{
    private static int num = 1;
    public static int getNum(){
         return num;
    }
}

public class TT { 
   public static void main(String[ ] args){
      System.out.println("num =  " + Demo.getNum());     
   }
}

final 修饰符

final变量

  • 变量一旦赋值后,不能被重新赋值。
  • 被 final 修饰的实例变量必须显式指定初始值。
  • 内部类定义在类中的局部位置上时,只能访问该局部被final修饰的局部变量。
final int num = 2;
public static final  int NUM  = 2; //常量

final方法

  • 父类中的 final 方法可以被子类继承,但是不能被子类重写。
class Demo
{
    private static int num = 1;
    public final int getNum(){
        return num;
    }
}
class Demo1 extends Demo
{
}    
public class TT { 
   public static void main(String[ ] args){
      System.out.println("num =  " + new Demo1().getNum());     
   }
}

final 类

  • final 类不能被继承。
public final class Test{ }

abstract 修饰符

抽象类

  • 抽象类不能用来实例化对象,目的是为了将来对该类进行扩充。
  • 如果一个类包含抽象方法,那么该类一定要声明为抽象类,否则编译错误。
  • 抽象类可以包含抽象方法和非抽象方法。
abstract class Name{
   private String name;
   public abstract void setName(); //抽象方法
   //非抽象方法
   public void getName(){
       rerurn this.name;
   }
}

抽象方法

  • 抽象方法的具体实现由子类提供。
  • 抽象方法只能被声明成abstract。
  • 任何继承抽象类的子类必须实现父类的所有抽象方法,除非该子类也是抽象类。
public abstract void setName(); //抽象方法

synchronized修饰符

  • 被声明的方法同一时间只能被一个线程访问。
public synchronized void setName(){
}
原文地址:https://www.cnblogs.com/hen-java/p/12597167.html