首页 > 编程语言 >Java修饰符与继承

Java修饰符与继承

时间:2023-07-31 19:44:56浏览次数:42  
标签:Java 继承 子类 修饰符 作用域 实例 静态方法 变量名 方法

一、class(类)

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

二、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. 内存分配:静态方法与实例方法都是随着类的加载而加载的,将结构信息存储在方法区

标签:Java,继承,子类,修饰符,作用域,实例,静态方法,变量名,方法
From: https://www.cnblogs.com/sTruth/p/17594321.html

相关文章

  • Java基础1
    基础概念Java特点面向对象:继承,封装(把数据和操作数据的方法捆绑在一起,比如setName和getName),多态(多态是指一个引用变量到底会调用哪个类的方法,由具体的类型决定。一个变量如果声明为父类的类型,但实际引用的是子类的对象,那么该变量可以调用父类的所有方法,也可以调用子类重写父类的......
  • Java 生态需要新鲜的血液、需要狂飙的刺激。Solon v2.4.1 发布
    Solon是什么开源项目?一个,Java新的生态型应用开发框架。它从零开始构建,有自己的标准规范与开放生态(历时五年,已有全球第二级别的生态规模)。与其他框架相比,它解决了两个重要的痛点:启动慢,费内存。关键记事:2021年1月,正式对外开源2022年7月,建立官网,发力推广2023年2月,v2.0发布。......
  • 学习Java的第10天
    变量变量是什么:就是可以变化的量!Java是一种强类型语言,每一个变量都必须声明其类型。Java变量是程序中最基本的存储单元,其要素包括变量名,变量类型和作用域。typevarName[=value][{,varName[=value]}];//数据类型变量名=值;;可以使用逗号隔开来声明多个同类型变量注......
  • Java中面向对象详解
    一.定义面向对象是:将事务高度抽象化的编程模式将问题分解成一个个小步骤,对每个步骤进行抽象,形成对象,通过不同的对象之间调用,组合解决问题。在进行面向对象进行编程时,要把属性、行为等封装成对象,然后基于这些对象及对象的能力进行业务逻辑的实现。创建一次,重复使用二.面向......
  • Java语言演示API接口对接电商数据平台,根据关键词获取商品列表源代码示例
     关键词搜索商品API接口在电商平台中具有重要的作用。以下是该API接口的一些重要性:提供精准搜索:关键词搜索商品API接口可以根据用户输入的关键词,快速准确地匹配出符合用户需求的商品。这样可以节省用户在浏览商品时的时间和精力,并提供更好的购物体验。增加用户转化率:通过关键词搜......
  • JavaScript 浅拷贝和深拷贝详解
    一、基本数据类型和引用数据类型基本数据类型:1.Number(数字类型)2.String(字符串类型)3.Boolean(布尔类型)4.Null(空类型)5.Undefined(未定义类型)6.Symbol(符号类型)引用数据类型:Object(对象类型):表示一组无序的键值对,例如{name:'张三',age:18}。基本数据类型是简单的数据类型,它......
  • Eclipse转IDEA开发java项目spring+mybaits项目踩坑记录
    久了不用一个东西总有遗忘,记录是你快速找回状态之本。今天将原来eclipse写的spring+mybatisDemo在idea上跑起来,花了不少时间。这里将坑记录下:一、IDEA创建项目   1.IDEA中项目project等价于Eclipse中workspace, eclipse的workspace中可以创建多个工程;在IDEA中达到相......
  • 用ComPDFKit Java库打开并阅读PDF文档
    在当今移动优先的世界中,创建Android应用程序是企业和开发人员的必备技能。而且,随着处理PDF文档的需求不断增加,使用功能强大的PDFSDKComPDFKit构建AndroidPDF阅读器和编辑器,能使您的最终用户轻松查看和编辑PDF。在本博客中,我们将首先探索集成ComPDFKitPDFSDK的必要......
  • java网络编程
    java网络编程网络编程三要素ip地址​ 设置在网络中的地址,是唯一标识端口​ 应用程序在设置种的唯一标识协议​ 数据在网络种传输的规则,常见的协议有UDP和TCP协议ipipv4ipv6IPv4:4个字节1100000000....太难记忆了变成10进制192.168.1.166运用了点分10进制......
  • java常见的排序算法(冒泡排序、选择排序、插入排序、shell排序、归并排序、堆排序、快
    文章目录一、冒泡排序1、效率表现和适用范围2、算法实现二、选择排序1、效率表现和适用范围2、算法实现三、插入排序1、效率表现和适用范围2、算法实现四、shell排序1、效率表现和适用范围2、算法实现五、归并排序1、效率表现和适用范围2、算法实现六、快速排序1、效率表现和适用......