面向对象进阶二(包、final、权限修饰符、代码块、abstract、接口、内部类)

news2024/11/26 3:21:57

面向对象进阶二

  • 一、包、final、权限修饰符、代码块
    • 1.1 包
    • 1.2 final关键字
    • 1.3 权限修饰符
    • 1.4 代码块
      • 1.4.1 局部代码块(已淘汰,了解)
      • 1.4.2 构造代码块(了解内容)
      • 1.4.3 静态代码块
  • 二、抽象方法和抽象类
  • 三、接口
    • 3.1 接口中的成员特点
    • 3.2 类和接口的关系
    • 3.3 接口的升级规则
      • 3.3.1 JDK8以后接口中新增的方法:
      • 3.3.2JDK9以后接口中新增的方法:
      • 3.3.3总结
    • 3.4 接口的应用
    • 3.5 适配器设计
  • 四、内部类
    • 4.1 成员内部类
    • 4.2 静态内部类
    • 4.3 局部内部类
    • 4.4 匿名内部类

一、包、final、权限修饰符、代码块

1.1 包

包就是文件夹,管理各种不同的Java类。
● 使用同一个包中的类时,不需要导包。
● 使用java.lang包中的类时,不需要导包。
● 其他情况都需要导包
● 如果同时使用两个包中的同名类,需要用全类名。

1.2 final关键字

final关键字可修饰方法、类、变量。
● 修饰方法:该方法为最终方法,不能被重写;
● 修饰类:该方法为最终类,不能被继承;
● 修饰变量:只能赋值一次,不能更改,其实也就是常量。

常量:
实际开发中,常量一般作为系统的配置信息,方便维护,提高可读性。

命名规范

  • 单个单词:全部大写
  • 多个单词:全部大写,单词之间用下划线隔开

final修饰的变量是基本类型:那么变量存储的数据值不能发生改变。
final修饰的变量是引用类型:那么变量存储的地址值不能发生改变,对象内部的可以改变。

1.3 权限修饰符

权限修饰符:是用来控制一个成员能够被访问的范围的。
可以修饰成员变量,方法,构造方法,内部类。
在这里插入图片描述

1.4 代码块

1.4.1 局部代码块(已淘汰,了解)

用大括号括起来的范围。
作用:提前结束变量的生命周期

1.4.2 构造代码块(了解内容)

定义:写在成员位置的代码块。
作用:可以将多个构造方法中重复的语句抽取出来。
执行时机:在创建本类对象时会先执行构造代码块的内容,再执行构造方法。

1.4.3 静态代码块

格式:static{}
特点:需要通过static关键字修饰,随着类的加载而加载,并且自动触发、只执行一次。
使用场景:在类加载的时候,做一些数据初始化的时候使用。

二、抽象方法和抽象类

修饰词:abstract。

作用:
抽取共性时无法确定方法体,就把该方法写成抽象的,强制让子类进行重写。

● 抽象方法:将共性的行为(方法)抽取到父类之后。
由于每一个子类执行的内容是不一样,所以,在父类中不能确定具体的方法体。
该方法就可以定义为抽象方法。

● 抽象类:如果一个类中存在抽象方法,那么该类就必须声明为抽象类。

定义格式
抽象方法:public abstract 返回值类型 方法名(参数列表)
抽象类: public abstract class 类名{}

抽象类和抽象方法的注意事项
● 抽象类不能实例化(创建对象);
● 抽象类中不一定有抽象方法,有抽象方法的类-定是抽象类;
● 可以有构造方法;
● 抽象类的子类:
- 要么重写抽象类中的所有抽象方法
- 要么是抽象类

三、接口

abstract在对方法体不确定时进行修饰,侧重于该类事物的性质。而接口更偏向于是对行为的“抽象”。
在这里插入图片描述
在这里插入图片描述

3.1 接口中的成员特点

  • 成员变量:只能是常量;默认修饰符:public static final
  • 构造方法:没有
  • 成员方法:只能是抽象方法;默认修饰符:public abstract

3.2 类和接口的关系

  • 类和类的关系:继承关系,只能单继承,不能多继承,但是可以多层继承。
  • 类和接口的关系:实现关系,可以单实现, 也可以多实现,还可以在继承一个类的同时实现多个接口。
  • 接口和接口的关系:继承关系,可以单继承,也可以多继承。(如果实现类实现了最下面的子接口,那么就需要重写所有的抽象方法)

3.3 接口的升级规则

3.3.1 JDK8以后接口中新增的方法:

允许在接口中定义默认方法,需要使用关键字default修饰
作用:解决接口升级的问题
接口中默认方法的定义格式:

  • 格式: public default返回值类型方法名(参数列表) { }
    范例: public default void show() { }
  • 接口中默认方法的注意事项:
    ① 默认方法不是抽象方法,所以不强制被重写。但是如果被重写,重写的时候去掉default关键字。
    ② public可以省略, default不能省略。
    ③ 如果实现了多个接口,多个接口中存在相同名字的默认方法,子类就必须对该方法进行重写。

允许在接口中定义定义静态方法,需要用static修饰

  • 接口中静态方法的定义格式: public static返回值类型方法名(参数列表){ }
    范例: public static void show(){ }

  • 接口中静态方法的注意事项:
    ① 静态方 法只能通过接口名调用,不能通过实现类名或者对象名调用
    ② public可以省略, static不 能省略

3.3.2JDK9以后接口中新增的方法:

允许在接口中定义私有方法

格式1: private 返回值类型方法名(参数列表){ }
范例1: private void show(){ }

格式2: private static返回值类型方法名(参数列表){ }
范例2: private static void method() { }

3.3.3总结

  • JDK7以前:接口中只能定义抽象方法。
  • JDK8: 接口中可以定义有方法体的方法。(默认、 静态)
  • JDK9: 接口中可以定义私有方法。
  • 私有方法分为两种: 普通的私有方法,静态的私有方法

3.4 接口的应用

  • 接口代表规则,是行为的抽象。想要让哪个类拥有一个行为,就让这个类实现对应的接口就可以了。
  • 当一个方法的参数是接口时,可以传递接口所有实现类的对象,这种方式称之为接口多态。

3.5 适配器设计

1.当一个接口中抽象方法过多,但是我只要使用其中一部分的时候,就可以适配器设计模式
2.书写步骤:
编写中间类XXXAdapter,实现对应的接口;
对接口中的抽象方法进行空实现,让真正的实现类继承中间类,并重写需要用的方法;
为了避免其他类创建适配器类的对象,中间的适配器类用abstract进行修饰。

四、内部类

类的五个成员:属性、方法、构造方法、代码块、内部类。
内部类就是在一个类内,再创建的一个类。将一个类A定义在另一个类B里面,里面的那个类A就称为内部类,B则称为外部类
内部类是外部类的一部分,且单独出现时没有意义。
① 内部类可以直接访问外部类的成员(包括私有的);
② 外部类不能直接访问内部类的成员,必须创建对象。

内部类分为:成员内部类、静态内部类、局部内部类、匿名内部类四种。前三种均属于了解内容,可能在源码中才会看。

  1. 成员内部内,类定义在了成员位置 (类中方法外称为成员位置,无static修饰的内部类)
  2. 静态内部类,类定义在了成员位置 (类中方法外称为成员位置,有static修饰的内部类)
  3. 局部内部类,类定义在方法内
  4. 匿名内部类,没有名字的内部类,可以在方法中,也可以在类中方法外。

4.1 成员内部类

使用格式:外部类.内部类

获取成员内部类对象:
外部类.内部类 变量 = new 外部类().new 内部类();
② 在外部类中定义一个方法提供内部类的对象。

编写成员内部类的注意点:

  1. 成员内部类可以被一些修饰符所修饰,比如: private,默认,protected,public,static等
  2. 在成员内部类里面,JDK16之前不能定义静态变量,JDK16开始才可以定义静态变量。
  3. 创建内部类对象时,对象中有一个隐含的Outer.this记录外部类对象的地址值。

4.2 静态内部类

属于成员内部类的特殊情况。有static修饰,属于外部类本身的。

  • 拓展1:静态内部类可以直接访问外部类的静态成员。
  • 拓展2:静态内部类不可以直接访问外部类的非静态成员,如果要访问需要创建外部类的对象。
  • 拓展3:静态内部类中没有银行的Outer.this。

使用格式:外部类.内部类
创建静态内部类的对象:部类.内部类 变量 = new 外部类.内部类构造器;

调用非静态方法的格式:先创建对象,用对象调用
调用静态方法的格式:外部类名.内部类名.方法名();

4.3 局部内部类

局部内部类:定义在方法中的类。

4.4 匿名内部类

匿名内部类 :是内部类的简化写法。他是一个隐含了名字的内部类。
格式:

new 类名或者接口名() {
     重写方法;
};

包含了:

  • 继承或者实现关系
  • 方法重写
  • 创建对象

整体就是一个类的子类对象或者一个接口的实现类对象

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

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

相关文章

解释 void 类型转换: (void)++y

谢谢大师们的指导,保存,分享

【LeetCode】HOT 100(23)

题单介绍: 精选 100 道力扣(LeetCode)上最热门的题目,适合初识算法与数据结构的新手和想要在短时间内高效提升的人,熟练掌握这 100 道题,你就已经具备了在代码世界通行的基本能力。 目录 题单介绍&#…

JS语法学习实战系列

JS学习实战系列 一、数据类型二、运算符三、流程控制四、let 、var、 const 声明变量的区别 JavaScript(简称“JS”) 是一种具有函数优先的轻量级,解释型或即时编译型的编程语言。虽然它是作为开发Web页面的脚本语言而出名,但是它…

电路维修(双端队列bfs)

题意:从左上角走到右下角,且只能走斜线,斜线可以旋转,旋转斜线那么走过这条线,那么距离就加1,求最小的距离。 分析:有一个性质,因为起点是偶数点(0,0),那么它只能走到偶数点&#x…

进程间通信-有名管道

理解&#xff1a;有名管道类似于文件io 相当于新建一个管道文件作为中间介质 进行数据的交换&#xff08;因此可以不同线程间通信&#xff09; 写入管道文件 #include <sys/types.h> #include <sys/stat.h> #include <stdio.h> #include <stdlib.h> #…

菜鸡shader:L9 屏幕UV及屏幕UV扰动

文章目录 屏幕UV代码最后效果 屏幕UV扰动代码最后效果 屏幕UV 最主要的代码是屏幕UV的获取&#xff1a; 这里具体可以参考这位大佬的博客&#xff1a; 个人学习笔记——庄懂的技术美术入门课&#xff08;美术向&#xff09;17&#xff08;VS空间畸变矫正的原理&#xff09;个…

驱动程序设计 Linux设备驱动中的阻塞与非阻塞IO、信号与函数 7.12

linux设备驱动中的阻塞与非阻塞I/O 阻塞&#xff1a;等待某种资源&#xff0c;如果获取不到&#xff0c;就会把当前任务挂起&#xff0c;等待资源准备好 1. int flag 0; while(flag 0); 2.等待队列 wait_event(q,flag > 0); wakeup(q);非阻塞&#xff1a;等待某种资源非…

nodejs中使用Redis

安装教程&#xff1a;Redis 安装 | 菜鸟教程 redis下载链接&#xff1a;Release Redis for Windows 5.0.14.1 tporadowski/redis GitHub解压双击redis-server.exe启动服务器端双击redis-cil.exe启动客户端连接服务端在客户端看看能不能ping通 完成 遇到的问题1&#x…

前端处理后端返回的文件流,进行文件下载

二进制流格式 Blob格式 前言&#xff1a; 需求&#xff1a;根据后端接口返回的文件流进行数据处理&#xff0c;并实现文件的下载&#xff0c;且下载文件为word文档. 代码实现&#xff1a; //下载文件 async function DownLoadFile(row) {let res await DownLoadFileAPI(row.…

火山引擎 DataLeap 构建Data Catalog系统的实践(二):技术与产品概览

技术与产品概览 架构设计 元数据的接入 元数据接入支持T1和近实时两种方式 上游系统&#xff1a;包括各类存储系统&#xff08;比如Hive、 Clickhouse等&#xff09;和业务系统&#xff08;比如数据开发平台、数据质量平台等&#xff09; 中间层&#xff1a; ETL Bridge&#x…

PCL点云处理之最小二乘直线拟合(❤❤❤亲测可用❤❤❤)(二百)

PCL点云处理之最小二乘直线拟合(❤❤❤亲测可用❤❤❤)(二百) 一、算法介绍二、具体代码1.代码2.结果一、算法介绍 点云近似于直线分布,但相对要散乱一些,此时,最小二乘直线拟合,是一种最常用的拟合方法,可以从中找到最优的直线方程,用于描述点云的分布情况。网上介…

Yjmstr的算法竞赛模板(updating)

YJMSTR的算法竞赛模板 目录 文章目录 YJMSTR的算法竞赛模板目录图论一、最短路1.spfa与负环、最短路1.1 bfs-spfa找负环&#xff1a;1.2 dfs-spfa找负环1.3 spfa求最短路的优化 2.dijkstra模板&#xff08;set模拟二叉堆堆优化)2.1有向图最小环 3.Floyd求多源最短路/传递闭包/…

ARM Coresight 系列文章 7 - ARM Coresight 通过 AHB-AP 访问 cpu 内部 coresight 组件

文章目录 如下图所示&#xff0c;如果A78想去访问M33的内部 coresight 组件 ETM&#xff0c;需要要怎么做&#xff1f; 答案也正是在图中&#xff0c;首先A78 通过AXI 互联&#xff0c;接入到 APBIC 的 slave port&#xff0c;再通过APBIC 的 master 送出&#xff0c;而APBIC中…

【win11】将一个程序设置为开机启动

Windows 在 Windows 系统中&#xff0c;可以通过在 “启动” 文件夹中放置程序的快捷方式来实现开机启动。 按照以下步骤操作&#xff1a; 按 Win R 打开 “运行” 对话框&#xff0c;输入 shell:startup&#xff0c;然后按回车。这将打开 “启动” 文件夹。 找到你想设置…

自由视点合成中的表征学习(二)

三维重建以及神经渲染中的学习 公众号AI知识物语 本文内容为参加过去一次暑期课程学习时的笔记&#xff0c;浅浅记录下。 自由视点合成中的表征学习 目标&#xff1a;给定单一场景多个图片以及相机位子&#xff0c;生成新视角下的图像 挑战&#xff1a;恢复三维场景结构&…

Stable Diffusion (持续更新)

引言 本文的目的为记录stable diffusion的风格迁移&#xff0c;采用diffusers example中的text_to_image和textual_inversion目录 2023.7.11 收集了6张水墨画风格的图片&#xff0c;采用textual_inversion进行训练&#xff0c;以"The street of Paris, in the style of …

rabbitmq 开启 virtual host

由于我的rabbitmq架设在测试服务期。 导致我本地测试的mq消息&#xff0c;经常被服务器消费掉。 所以通过添加v-host&#xff0c;可以创建专属v-host域下的消息进行生产和消费。 一 新增用户 点击Admin,点击右边Users 输入Username Password &#xff0c;并且Tags给与Admin权…

25 MFC 富文本

文章目录 ui 设置 使用AfxInitRichEdit2(); 初始化否则不显示 //初始化 BOOL CnotePadDlg::OnInitDialog() {CDialogEx::OnInitDialog();// 设置此对话框的图标。 当应用程序主窗口不是对话框时&#xff0c;框架将自动// 执行此操作SetIcon(m_hIcon, TRUE); // 设置大图标…

latex安装

工作环境下载一下&#xff0c;本来想偷懒&#xff0c;但是网站的编辑器实在是不太给力。 先安装TeX Live(网址&#xff1a;TeX Live - TeX Users Group (tug.org)) 然后等待一会:(路径最好不要有中文) 然后&#xff0c;等待&#xff1a;&#xff08;很久&#xff09; 嘻嘻&…