【第一阶段:java基础】第8章:面向对象编程高级-2(P394-P423)final、抽象类、接口、内部类

news2024/11/25 14:39:12

 本系列博客是韩顺平老师java基础课的课程笔记,吐血推荐的一套全网最细java教程,获益匪浅 韩顺平java课程

目录(P394-P423)

1 final

2 抽象类

3 接口

4 内部类

1️⃣ 局部内部类

2️⃣🍓匿名内部类

3️⃣成员内部类

4️⃣静态内部类


1 final

  • 基本介绍
    • final可以修饰类 属性 方法 和局部变量
    • 当不希望类被继承时,可以用final修饰
    • 当不希望父类的某个方法被覆盖/重写时,可以使用final修饰方法
    • 当不希望父类的某个属性值被修改时,可以使用final修饰该属性
      public final double fax=0.08
    • 当不希望某个局部变量(方法中的变量)被修改时,可以使用final修饰该局部变量
  • 使用细节
    • final修饰的属性又叫做常量,一般用XX_XX_XX来命名
    • final修饰的属性在定义时,必须赋值,并且以后不能修改,赋值可以在如下位置之一:1. 定义时,2. 构造器中 3. 代码块中
    • 如果final修饰的属性是静态的,则初始化的位置执行是在1.定义时 2. 静态代码块中,不能在构造器中赋值
      因为final修饰的静态变量在类加载的时候就需要初始化,而构造器是在类加载时下运行的
    • final类不可以继承,但是可以实例化对象
    • 一般来说,如果一个类已经是final类了,就没有必要将该方法修饰成final方法
    • final方法不能修饰构造器
    • final和static一般搭配使用,效率更高,不会导致类的加载,底层编译器做了优化处理
    • 包装类(interger double float boolean)等都是final ,string也是final

2 抽象类

  • 问题引入
    • 父类方法不确定性:当父类的某些方法需要声明,但是又不确定如何实现时,可以将其声明为抽象方法,这个类对应的就是抽象类
    • 抽象方法是没有实现的方法(方法中没有方法体)
  • 介绍
    • 当一个类中存在抽象方法时,必须将这个方法声明为抽象类
    • 抽象方法没有方法体
    • abstract class animal{abstract public void eat();}
    • 一般来说,抽象类会被继承,由子类来实现
    • 抽象类的价值更多的在于设计,设计者设计好之后,子类继承并实现抽象类(是考官比较爱问的知识点,在框架和设计模式中使用较多)
  • 细节
    • 抽象类不能实例化
    • 抽象类不一定包含抽象方法
    • 一旦类包含了抽象方法,就必须将这个类声明为abstract
    • abstract 只能修饰类和方法,不能修饰属性和其他
    • 抽象类可以有任意成员(抽象类的本质还是类)
    • 如果一个类继承了抽象类,则它必须实现抽象类的所有抽象方法,除非他自己也声明为abstract类
    • 抽象方法不能使用private final static 来修饰,因为这些关键字都是和重写相违背的
  • 抽象类的应用:模板设计模式

3 接口

  • 基本介绍
    • 定义
      • 接口就是给出一些没有实现的方法,等到某个类使用的时候,再根据具体情况吧这些方法写出来
    • 语法
      • interface 接口名{属性,方法}
      • class 类名 implements 接口{自己的属性,自己的方法,必须实现的接口的所有抽象方法}
    • 小结
      • 在jdk7.0以前,接口中的所有方法都没有方法体,即全部都是抽象方法
      • jdk8.0以后,接口中可以有静态方法,默认方法(用default关键字修饰),也就是说接口中可以有方法的具体实现
  • 细节
    • 接口不能被实例化
    • 接口中所有方法都是public方法,在接口中,抽象方法可以省略abstract关键字
    • 一个普通类实现接口,就必须将接口中的所有方法都实现,可以使用alt+enter快捷键来批处理
    • 抽象类实现接口,可以不用实现接口的方法(因为抽象类中允许抽象方法存在)
    • 一个类可以同时实现多个接口
    • 接口的修饰符只能是public和默认,这一点和类的修饰符是一样的
    • 接口中的属性,只能是final的,并且是public static final 修饰的。比如受int a=1 实际上是public static final int a=1
    • 接口中属性的访问形式是 接口名.属性名
    • 接口不能继承别的类,但是可以继承多个别的接口
  • 接口实现 VS 继承
    • 理解
      • 可以将接口理解为对继承机制的一种补充
      • 小猴子和老猴子之间是继承关系,但是如果小猴子想拥有小鸟的飞翔能力,就应该向小鸟学习,实现它的飞翔功能。(先天拥有和后天学习的区别)
      • 当子类继承了父类就自动拥有了父类的功能,如果子类需要扩展功能,可以通过实现接口的方式进行扩展
      •  
    • 小结
      • 接口和继承解决的问题不同
        • 继承的价值在于:解决代码的复用性和可维护性
        • 接口的价值在于:设计好各种规范,让其他类去实现这些方法
      • 接口比继承更加灵活
        • 继承必须满足is-a的关系,但是接口只需要满足like-a的关系即可
        • 接口在一定程度上实现了代码的解耦 (即 接口的规范性+动态绑定)
  • 接口多态特性
    • 多态参数
      • 在老师给的案例中,接口类型的形参,既可以接受手机对象,也可以接收相继对象(只要是实现了接口的类都可以接受)
      • 接口类型的变量,可以指向实现了该接口的对象实例(类似于继承关系中的向上转型)
    • 多态数组
      • 一个USB(接口)数组中,既可以接收手机对象,也可以接收相机对象(接口数组中能存放实现了该接口的类的对象实例)
    • 多态的传递性
      • (可以将接口实现类比与继承关系)
    • 小结

     

4 内部类

  • 基本介绍
    • 一个类的内部又完整地嵌套了另一个类结构,被嵌套的类称为内部类,嵌套其他类的类称为外部类。是类的五大成员之一。内部类最大的特点是可以直接访问私有属性,并且可以体现类与类之间的包含关系。
    • 类的五大成员:属性 方法 构造器 代码块 内部类
    • 使用场景:当只想用一次某一个类,下一次不想再用时
  • 基本语法
  • 内部类分类
    • 定义在外部类局部位置上(比如方法内)
      • 1️⃣ 局部内部类(有类名)
      • 2️⃣ 匿名内部类(没有类名,重点🍓💥💥)
    • 定义在外部类的成员位置上(属性或者方法位置)
      • 3️⃣ 成员内部类(没有static修饰)
      • 4️⃣ 静态内部类(有static修饰)
  • 1️⃣ 局部内部类

    • 🍓定义在外部类的局部位置上(通常是在方法中或者代码块中),并且有类名

    • 局部内部类可以访问外部类的所有成员,包括私有的
    • 不能添加访问修饰符,因为它的地位就是一个局部变量。局部变量是不能使用修饰符的,但是可以使用final修饰,因为局部变量也可以使用final。加上final之后,说明这个内部类是不能被其他类继承的。
    • 🍓作用域:仅仅在定义它的方法或者代码块中
    • 局部内部类访问外部类的成员:直接访问
    • 外部类访问局部类的成员:在方法中创建内部类对象,再访问
    • 外部其他类不能访问局部内部类(因为局部内部类的低位是一个局部变量)
    • 如果外部类和局部内部类的成员重名时,内部类访问成员默认遵循就近原则,如果想访问外部类的成员,则可以使用(外部类名.this.成员)去访问

     

  • 2️⃣🍓匿名内部类

    • 基本介绍
      • 匿名内部类是定义在外部类的局部位置,比如说方法中,并且没有类名的一种类
    • 基本语法
    • 基于接口
      • tiger的编译类型是接口,运行类型就是匿名内部类。jdk在底层创建了匿名内部类之后,立即创建了匿名实例,并且把地址返回给tiger
      • 匿名内部类使用一次就不能再继续使用了(但是创建过的对象引用是可以继续再使用的)
    • 基于类
    • 细节
      • 匿名内部类既是一个类的定义,同时本身也是一个对象,因此从语法上看,它既有定义类的特征,也有创建对象的特征。
      • 不能直接访问外部类的所有成员,包括私有的
      • 不能添加类的访问修饰符,因为它的地位就是一个局部变量
      • 作用域:仅仅在定义它的方法或代码块中
      • 匿名内部类访问外部成员:直接访问
      • 外部其他类不可以访问匿名内部类
      • 如果外部类和匿名内部类的成员重名时,匿名内部类的访问遵循就近原则,如果想访问外部类的成员,使用 外部类名.this.成员 去访问
    • 最佳实践
      • 把匿名内部类当做实参直接传递,简洁高效

       

  • 3️⃣成员内部类

    • 说明:定义在外部类的成员位置,并且没有static修饰
    • 可以访问外部类的所有成员,包括私有的
    • 可以添加任意访问修饰符,因为它本质就是一个成员
    • 语法
    • 作用域和外部类的其他成员一样,为整个类体
    • 成员内部类访问外部类:直接访问
    • 外部类访问成员内部类:创建对象再访问
    • 外部其他类访问成员内部类有两种方式:
      • 把内部类当做外部类的一个成员
      • 在外部内在写一个方法,返回内部类的对象
      •  
    • 外部类和成员内部类的成员重名时,内部类的访问,遵循就近原则,如果想访问外部类的成员,则可以使用 外部类名.this.成员 去访问
  • 4️⃣静态内部类

    • 说明:定义在外部类的成员位置,并且有static修饰
    • 可以直接访问外部类的所有静态成员,包括私有的,但是不能直接访问非静态成员
    • 可以添加任意的访问修饰符,因为它的地位就是一个成员
    • 作用域和其他成员一样,为整个类体
    • 静态内部类访问外部类:直接访问
    • 外部类访问静态内部类:创建对象,再访问
    • 外部其它类访问静态内部类的两种方式
      • 通过类名直接访问
      • 在外部类中创建一个方法,返回类的实例
    • 如果外部类和静态内部类的成员重名时,静态内部类访问时,遵循就近原则,如果想访问外部类的成员,则可以使用 外部类名.成员名 去访问

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/52962.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C++,顺序结构,选择结构,循环结构

目录 1.选择结构 1.1if语句 1.1.1单行if语句 1.1.2多行格式的if语句 1.1.3多条件if语句 1.1.4嵌套if语句 1.2三目运算符 1.3switch语句 2.循环结构 2.1while循环 2.2do..while语句 2.3for循环语句 2.4嵌套循环 3.跳转语句 3.1.1break 3.1.2continue 3.1.3goto语句 …

UDP-GlcNAc,UDPAG,尿苷二磷酸-N-乙酰基葡萄糖胺,UDP-N-乙酰葡糖胺

产品名称:UDP-GlcNAc 尿苷二磷酸-N-乙酰基葡萄糖胺,UDPAG,UDP-N-乙酰葡糖胺 别 名:5-二磷酸尿嘧啶核苷-N-乙酰半乳糖胺二钠盐;5′-二磷酸尿嘧啶核苷-N-乙酰半乳糖胺二钠盐 英文名:uridine 5-diphospho-N-acetyl-*g…

在家做副业可以做什么,做自媒体应该选择什么平台

今天分享五个,即使你在家里没有收入,自己就可以做的自媒体副业,给自己带来一些收益。 ​ 第一个自媒体副业是公众号,很多人多人都知道。很多人也喜欢看别人写的公众号。 其实微信官方账号注册很简单,不需要花钱有个邮…

Huggingface Transformers各类库介绍(Tokenizer、Pipeline)

目录前言0、transformers的安装以及介绍0-1、 介绍0-2、安装一、分词——transformers.AutoTokenizer1-0、相关参数介绍(常用参数介绍)1-1、加载、保存1-2、使用以及原理二、黑盒子——transformers.pipeline2-0、pipeline怎么理解?2-1、目前…

SpringCloud:Gateway之限流、熔断

目录 一、服务雪崩简介及压测实践演示 ​编辑 二、sentinel简单模式之流控QPS案例 什么是Sentinel ​ 安装Sentinel控制台 三、sentinel流控简单模式之并发线程数案例 四、sentinel流控之关联模式&链路模式 关联模式 链路模式 五、sentinel降级之平均响应时间&…

Mybatis入门

详细的Mybatis介绍/使用,可以访问: 地址:mybatis – MyBatis 3 | 简介 目录 一、Mybatis介绍 二、依赖 三、什么是rowmapper 四、Mybatis demo 演示 4.1 背景 4.2 JDBC执行sql的流程 &Mybatis 关键要素 4.3 项目的整体结构&…

kubernetes 实战学习

文章目录kubernetes 实战学习1. 资源创建方式2. Namespace3. Pod3.1 使用命令行创建一个 Pod3.2 使用 YAML 文件创建一个 pod3.3 查看 pod 日志3.4 查看 pod IP3.5 进入 pod 查看信息3.6 一个 pod 里同时运行多个容器3.7 pod 和宿主机之间文件拷贝4. Deployment4.1 deployment …

功能测试(一)—— web项目环境与测试流程、业务流程测试

目录 目标 一、web项目环境说明 【了解】 ​编辑 1.1 环境的定义 1.2 环境(服务器)的组成 1.3 面试题:你们公司有几套环境? 二、熟悉商城项目 【了解】 2.1 商城项目的核心业务 2.2 商城项目的核心功能模块 三、测试流程的应用 【重点】 3.1 需…

Java 基础数据类型占用内存空间和字符串编码简介(二)

Java 基础数据类型占用内存空间简介一 计算机简介1.基本概念2.CPU 三级缓存3.本机参数查看二 数据占用内存情况1.多线程Demo2.结果解析1.直接计算2.volatile 计算3.缓存行填充一 计算机简介 结合多线程计算机的硬件,从侧面理解数据存储如何影响我们的程序 1.基本概…

数据结构学习笔记(Ⅶ):查找

目录 1 查找 1.1 定义 1.2 查找操作 1.3 算法评价指标 2 查找算法 2.1 顺序查找 1.算法思想 2.实现 3.查找效率 4.算法优化 2.2 折半查找 1.算法思想 2.算法实现 3.查找判定树 4.折半查找效率 2.3 分块查找 1.算法思想 2.查找效率分析 3 B树 3.1 B树概念 3…

Java#30(扩展知识:可变参数与Collections)

目录 一.可变参数 二.Collections 1.Collections常用的API 一.可变参数 本质: 可变参数本质上是一个数组 作用: 在形参中接收多个数据 格式: 数据类型...参数名称 例如: int...a 代码示范: package Demo;public class Test {public static void main(String[] args) {int s…

单目标优化:蜣螂优化算法(Dung beetle optimizer,DBO)

蜣螂优化算法(Dung beetle optimizer,DBO)由Jiankai Xue和Bo Shen于2022年提出,该算法主要受蜣螂的滚球、跳舞、觅食、偷窃和繁殖行为的启发所得。 一、蜣螂优化算法 1.1蜣螂滚球 (1)当蜣螂前行无障碍时…

redis基础3——配置文件核心参数实测+RDB持久化、AOF持久化核心参数详解

文章目录一、redis.conf配置文件详解1.1 查看配置文件位置1.2 启动需指定配置文件1.3 单位大小写不敏感1.4 引用其他配置文件(包含)1.4.1 测试参数存放前后位置1.4.1.1 反例1.4.1.2 正例1.4.2 测试引用参数有效性1.5 网络相关1.5.1 绑定IP1.5.2 保护模式…

全球领先飞瞳引擎™云服务全球两千+企业用户,集装箱识别集装箱箱况残损检测,正常箱号识别率99.98%以上,箱信息识别及铅封识别免费

全球领先飞瞳引擎™AI集装箱识别检测云服务全球两千企业用户,集装箱识别集装箱箱况残损检测,正常箱号识别率99.98%以上,箱信息识别及铅封识别免费。CIMCAI中集飞瞳是全球应用落地最广,规模最大,最先进的的港航人工智能…

链游新发展方向:告别高强度打金,回归游戏本质

2022 年伊始,加密领域最瞩目的项目要属区块链游戏了。随着 Axie Infinity、Genopets 和 Perion 等公司大获成功,区块链游戏生态系统逐渐进入主流圈。值得一提的是,游戏和 NFT 这两个备受关注的类别在 Web 3 世界中互相成就,创造出…

【简单总结】SLAM 算法的 Benchmark 及相关数据集的结果对比

前言与参考 主要是copy一下总结,方便自己后续找方案特定使用,所有的出处均在标题处和原链接跳转,此处仅做各个benchmark收集使用,如果有原作者觉得侵权,请联系我 将全力配合相关内容和链接删除 如果网友有其他更新的…

代码随想录刷题day51 309.最佳买卖股票时机含冷冻期;714.买卖股票的最佳时机含手续费

代码随想录刷题day51 309.最佳买卖股票时机含冷冻期;714.买卖股票的最佳时机含手续费 股票买卖,前两天的有点忘了正好也复习一下。 309.最佳买卖股票时机含冷冻期 309. 最佳买卖股票时机含冷冻期 - 力扣(Leetcode) 不是很好优…

Java---SpringBoot---SpringBoot

SpringBoot1,SpringBoot简介1.1 SpringBoot快速入门1.1.1 开发步骤1.1.1.1 创建新模块1.1.1.2 创建 Controller1.1.1.3 启动服务器1.1.1.4 进行测试1.1.2 对比1.1.3 官网构建工程1.1.3.1 进入SpringBoot官网1.1.3.2 选择依赖1.1.3.3 生成工程1.1.4 SpringBoot工程快…

尚医通-预约下单中rabbitmq的使用

需求描述 在挂号界面选择完需要挂号的医生和排版后,添加就诊人,确认挂号 附上业务流程图 技术分析 我们今天主要来看看这块 mq 的运用,也是一个思考,我还是挑着重要的来讲,这里讲讲我们这里怎么使用 mq 的 这里会用…

关于λ-optimal的初始化解算法在(元)启发式中的应用

关于λ-optimal算法在启发式中初始化解的应用TSP问题介绍λ-optimal定理与定义算法描述与伪代码算法的优化参考文献这里讨论组合优化中初始解的生成问题。组合优化问题,很多情况下,解的生成是随机的或者是采用某种直观上满足题意的初始化方法&#xff0c…