Java修饰符

一、class(类)

  1. 可以继承类(仅限一个)
    1. 继承普通类:不一定要重写父类的所有方法
    2. 继承抽象类:必须重写父类的所有抽象方法,除非将自己定义为抽象类
    3. 只可继承父类【public、protected】的字段、方法(privated不可继承)
      1. 包含父类的构造方法
      2. final修饰的字段可继承,不可重新赋值, final修饰的方法可继承,不可重写
      3. static修饰的字段可继承,可重新赋值, static修饰的方法可继承,可重写
      4. 子类将从父类继承过来的方法的地址信息保存到自己的方法区
    4. 只具有包访问权限的字段、方法:只可被同一个包下的子类继承,不可被其他包下的子类继承
  2. 可以实现接口(支持多个)
    1. 必须实现父类的所有(抽象)方法,除非将自己定义为抽象类
  3. 可以同时继承类与实现接口(实现接口需写在继承类之后)
  4. class的修饰符
    1. public:作用域为【本包+其他包】,可以被其他任何类访问
    2. default(无声明时的默认修饰符):作用域为【包作用域】
    3. final:使用final修饰的类不可被继承
    4. abstract:使用abstract修饰的类被称为【抽象类】,天生为了被继承而设计的
      1. 抽象类不一定必须有抽象方法,并且可以有非抽象方法
      2. 不可被实例化:可通过将子类向上转型为父类实现实例化对象(Person person = new Stydent())
  5. 外部类与内部类
    1. 外部类:只能用public、default修饰
    2. 内部类:可以用public、default、final、abstract、private、protected修饰

二、interface(接口)

  1. 只可以继承接口(仅限一个)
  2. 接口继承接口时,不一定要重写父类的所有(抽象)方法
  3. 不能被实例化
  4. interface的修饰符
    1. public:作用域为【本包+其他包】,可以被其他任何类访问
    2. default(无声明时的默认修饰符):作用域为【包作用域】
    3. abstract:接口本身是抽象的,因此不需要显式地使用abstract修饰符进行修饰
  5. 接口下定义的field:被隐式定义为【public static final】
  6. 接口下定义的method:被隐式定义为【public abstract】

三、field(字段)

  1. field的修饰符
    1. public:作用域为【本包+其他包】,有访问本类的权限即可访问
    2. default(无声明时的默认修饰符):作用域为【包作用域】
    3. private:作用域为【本类】,无法被其他类访问,本类的嵌套类可访问
    4. protected:
      1. 可以被子类及子类的子类访问
      2. 在其他包下,不支持通过该类对象访问该类的protected字段,【只支持通过子类对象访问该类的protected字段】
    5. final:使用final修饰的字段为【常量】
      1. 只可在使用之前被赋值一次,不可被修改
      2. 如果定义时未赋值,则必须在构造方法或静态代码块中初始化
      3. final也可以修饰方法参数
    6. static:
      1. 使用static修饰的字段被称为【类变量、静态变量】,静态变量【属于类,而不属于实例】,所有实例字段所共享同一个静态变量
      2. 没有被static修饰的字段则被称【实例变量】,每一个实例字段拥有一个实例变量
      3. 内存分配:java虚拟机只在加载类的过程中为静态变量分配一次内存,而每创建一个实例,都会为实例变量分配一次内存
      4. 静态变量调用:
        1. 在【本类】的【静态方法】内,通过【类名/实例变量名.静态变量名】调用静态变量(类名可省略)
        2. 在【本类】的【实例方法】内,通过【this/类名/实例变量名.静态变量名】调用静态变量(this/类名可省略)
        3. 在【本包中的其他类】的【静态+实例方法】内,通过【类名/实例变量名.静态变量名】调用静态变量
      5. 实例变量调用:
        1. 在【本类】的【静态方法】内,通过【实例变量名.静态变量名】调用实例变量
        2. 在【本类】的【实例方法】内,通过【this/实例变量名.静态变量名】调用实例变量(this可省略)
        3. 在【本包中的其他类】的【静态+实例方法】内,通过【实例变量名.静态变量名】调用实例变量

四、method(方法)

  1. 【重写(即覆盖)父类的字段、方法后】或【子类出现与父类【同名】的字段、方法时】,会将父类同名的字段、方法隐藏掉,需要通过关键字【super】调用父类的同名的字段、方法
  2. method的修饰符
    1. public:作用域为【本包+其他包】,有访问本类的权限即可访问
    2. default(无声明时的默认修饰符):作用域为【包作用域】
    3. private:作用域为【本类】,无法被其他类访问,本类的嵌套类可访问
    4. protected:可以【本包+其他包】的子类及子类的子类访问,不支持在其他包通过该类对象访问该类的protected方法,但支持在其他包通过子类对象访问该类的protected方法
    5. final:使用final修饰的方法不可被重写
    6. abstract:使用abstract修饰的方法被称为【抽象方法】
      1. 抽象方法所在的类必须是抽象类
      2. 抽象方法不可以有具体的方法体
      3. 子类必须重写父类的方法体,除非将子类定义为抽象类
    7. static:
      1. 使用static修饰的方法被称为【类方法、静态方法】
        1. 在【本类】的【静态方法】内,通过【类名/实例变量名.静态方法名】调用静态方法(类名可省略)
        2. 在【本类】的【静态方法】内,通过【实例变量名.静态方法名】调用实例方法
        3. 在【本包的其他类】的【静态方法】内,无法调用静态方法、实例方法
      2. 没有被static修饰的方法则被称【实例方法】
        1. 在【本类】的【实例方法】内,通过【this/类名/实例变量名.静态方法名】调用静态方法(this/类名可省略)
        2. 在【本类】的【实例方法】内,通过【this/实例变量名.静态方法名】调用实例方法(this可省略)
        3. 在【本包的其他类】的【实例方法】内,无法调用静态方法、实例方法
      3. 内存分配:静态方法与实例方法都是随着类的加载而加载的,将结构信息存储在方法区
posted @   sTruth  阅读(75)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· .NET10 - 预览版1新功能体验(一)
点击右上角即可分享
微信分享提示