Java 修饰符(public、protected、default、private、static、final、abstract)

1、对类的访问修饰符

class前面只能使用public和默认default

public对所有类可见,default对包内类可见。

2、对属性和方法的访问修饰符

Java访问控制符_初尘19的博客-CSDN博客 总结得很简练。

protected的规则有点麻烦,后面会单独整理一下。

这四种访问控制规则,在后面添加了final、static等非访问修饰符时,可见的形式可能会发生变化(比如static方法可以通过“类名.方法名”直接调用),但是否可见不会发生变化(private的static方法,依然不能被其他类调用)。

3、final

用于修饰类、属性、方法、局部变量

  • 修饰类:类不能被继承(抽象类就无法使用final)
  • 修饰属性/局部变量:不能被修改,相当于常量,被 final 修饰的实例变量必须显式指定初始值。
  • 修饰方法:该方法可以被继承,但不能被重写

4、static

参考 [java]static关键字的四种用法 - dotgua - 博客园 (cnblogs.com)

static不能修饰一个外部类

用于修饰内部类(静态内部类的内容后续补充)、属性、方法、代码块、局部变量

  • 修饰属性:将对象的属性变成了类的属性,每个类只有唯一的这一个属性,该类的对象共享该类的一个静态属性。这个特性导致静态变量可能涉及到并发的问题。
  • 修饰方法:不用先创建对象再调用方法,直接用 类名.静态方法名 调用该方法
  • 修饰代码块:静态代码块在该类加载的时候就会运行,普通代码块在创建实例的时候才会运行
  • 修饰内部类:只能修饰内部类,叫做静态内部类。static修饰外部类会报语法错误

有几点需要注意:

  • 静态成员不能访问非静态成员
  • 静态方法不能被重写(语法错误,过不了编译),只能被覆盖/重载。具体原理可以参考 Java 静态方法不能被重写
  • 静态内部类不会在外部类加载的时候就加载,而是在调用的时候才会被加载。这种懒加载的特性被用在单例模式中

5、abstract

用于修饰类、方法

  • 修饰类。抽象类一般用于设计,抽象类存储一些未实现的方法,子类通过继承来实现这些方法
  • 修饰方法。抽象方法没有方法体(没有'{}'及其中的内容),格式和C语言的函数声明一样

注意:

  • 一个类只要有abstract修饰,就是抽象类,哪怕它没有任何的抽象方法。如果子类未实现所有抽象方法,则需要显式声明为抽象类
  • 抽象类不能实例化(即使所有方法都有方法体),除此之外拥有类的其他功能,可以包含成员、非抽象方法、构造器、静态属性、具有方法体的静态方法等
  • 一个实现了所有方法的类仍可以用abstract修饰,但一个有方法体的方法不能用abstract修饰。
  • 抽象方法不能被声明成 final 和 static。声明成final,则子类无法继承该方法并实现该方法,声明成static则该抽象方法本身无方法体,不可被调用,子类继承并重写该静态方法后,只能调用子类的静态方法,无法体现出父类的静态方法的特点(实际上,静态方法不能被重写)
posted @ 2022-01-12 16:44  _lyl  阅读(85)  评论(0编辑  收藏  举报