【java面向对象编程】第九弹----抽象类、接口、内部类

news2024/12/24 5:16:59

 笔上得来终觉浅,绝知此事要躬行

🔥 个人主页:星云爱编程

🔥 所属专栏:javase

🌷追光的人,终会万丈光芒  

 🎉欢迎大家点赞👍评论📝收藏⭐文章

  

一、抽象类

1.1基本介绍

(1)用abstract关键字来修饰一个类时,这个类就叫做抽象类。

语法:

访问修饰符 abstract 类名{}

(2)用abstract关键字来修饰一个方法时,这个方法就是抽象方法。

语法:

访问修饰符 abstract 返回类型 方法名(参数列表);

注:抽象方法无方法体,即连{}都不能有。

(3)抽象类的价值更多作用是在于设计,是设计者设计好后,让子类继承并实现抽象类。

1.2使用细节

(1)抽象类不能被实例化。

(2)抽象类不一定要包含abstract方法,即抽象类可以没有abstract方法。

(3)一旦类包含了abstract方法,则这个类必须声明为abstract类。

(4)abstract只能修饰类和方法,不能修饰属性和其他的。

(5)抽象类可以有任意成员;比如:非抽象方法、构造器等。

(6)抽象方法不能有主体,即不能实现。

(7)如果一个类继承了抽象类,则它必须实现抽象类的所有抽象方法,除非它自己也声明为abstract类。

(8)抽象方法不能使用private、final和static来修饰,因为这些关键字都是和重写相违背的。

二、接口

2.1基本介绍

接口就是给出一些没有实现的方法,封装到一起,到某个类要使用的时候,再根据具体情况把这些方法写出来

语法:

interface 接口名{

//属性

//方法

}

class 类名 implements 接口{

//自己属性

//自己方法

//必须实现的接口的

}

注:

(1)在jdk7以前,接口里的所有方法都没有方法体,即都是抽象方法。

(2)在jdk8后接口可以有静态方法,默认方法,也就是说接口中可以有方法的具体实现。

2.2注意事项及细节

(1)接口不能实例化。

(2)接口中所有的方法都是public方法,接口中抽象方法,可以不用abstract修饰。

(3)一个普通类实现接口,就必须将该接口的所有方法都实现。

(4)抽象类实现接口,可以不用实现接口的方法。

(5)一个类可以同时实现多个接口。

(6)接口中的属性,只能是final的,而且是public static final修饰符。

(7)接口中的属性的访问形式:接口名.属性名。

(8)接口不能继承其他的类,但是可以实现多个接口。

(9)接口的修饰符只能是public和默认。

2.3实现接口VS继承类

(1)解决的问题不同

继承的价值在于:解决代码的复用性和可维护性。

接口的价值在于:设计;设计好各种规范(方法),让其他类去实现这种方法,即更加的灵活。

(2)接口比继承更加灵活,继承是满足is-a的关系,而接口只需要满足like-a的关系。

(3)接口在一定程度上实现代码解耦(即:接口规范性+动态绑定机制)

2.4接口的多态特性

(1)多态参数;

(2)多台数组;

(3)接口存在多态传递现象。

三、内部类

3.1基本介绍

一个类的内部又完整的嵌套了另一个类结构。被嵌套的类称为内部类,嵌套其他类的类称为外部类。内部类是类的第五大成员(类的五大成员:属性、方法、构造器、代码块、内部类)。内部类最大的特点是可以直接访问私有属性,并且可以体现类与类之间的包含关系。

3.2基本语法

class Outer{//外部类

        class Inner{//内部类

        }

}

class Other{]//外部其他类

3.3内部类的分类

(1)定义在外部类局部位置上(比如方法类):

①局部内部类(有类名)

②匿名内部类(无类名

(2)定义在外部类的成员位置上:

③成员内部类(无static修饰)

④静态内部类(使用static修饰)

3.4局部内部类的使用

说明:局部内部类是定义在外部类的局部位置。

(1)可以直接访问外部类的所有成员,包含私有的。

(2)不能添加访问修饰符,因为它的地位就是一个局部变量,局部变量是不能使用访问修饰的;但是可以使用final修饰,因为局部变量也可以使用final.

(3)作用域:仅仅在定义它的方法或代码块中

(4)局部内部类访问外部类的成员

访问方式:直接访问。

(5)外部类访问内部类局部内部类的成员

访问方式:创建对象,再访问(必须在作用域内)。

(6)外部其他类不能访问局部内部类。因为局部内部类地位是个局部变量。

(7)如果外部类和局部内部类的成员重名时,默认是遵循就近原则,如果想访问外部类的成员,则可以用外部类名.this.成员去访问

3.5匿名内部类

说明:局部内部类是定义在外部类的局部位置。比如方法中

基本语法:

new 类或接口(参数列表){

        类体

};

(1)匿名内部类的语法比较独特,因为匿名内部类即是一个类的定义,同时它本身也是个对象,因此从语法上看,它既有定义类的特征,又有创建对象的特征。

(2)可以直接访问外部类的所有成员,包含私有的。

(3)不能添加访问修饰符,因为它的地位是局部变量。

(4)作用域:只在定义它的方法或代码块中。

(5)匿名内部类访问外部类成员

访问方式:直接访问。

(6)外部其他类不能访问匿名内部类。(因为其地位是局部变量)

(7)如果外部类和匿名内部类的成员重名时,默认是遵循就近原则,如果想访问外部类的成员,则可以用外部类名.this.成员去访问。

3.6成员内部类

说明:成员内部类是定义在外部类的成员位置,并且没有static修饰

(1)可以直接访问外部类的所有成员,包含私有的。

(2)可以添加任意访问修饰符,因为其地位就是一个成员。

(3)作用域:和外部类的其他成员一样,为整个类体。

(4)成员内部类访问外部类外部类:直接访问。

(5)外部类访问成员内部类:创建对象,再访问。

(6)外部其他类访问成员内部类:创建对象,再访问。

(7)如果外部类和成员内部类的成员重名时,默认是遵循就近原则,如果想访问外部类的成员,则可以用外部类名.this.成员去访问。

3.7静态内部类

说明:静态内部类是定义在外部类的成员位置,并且有static修饰。

(1)可以直接访问外部类的所有静态成员。包含私有的,但不能直接访问非静态成员。

(2)可以添加任意访问修饰符,因为其地位就是一个成员。

(3)作用域:同其他的成员,为整个类体。

(4)静态内部类访问外部类静态属性:直接访问所有静态成员。

(5)外部类访问静态内部类:创建对象,再访问。

(6)外部其他类访问静态内部类:创建对象,再访问。

(7)如果外部类和静态内部类的成员重名时,默认是遵循就近原则,如果想访问外部类的成员,则可以用外部类名.成员去访问。

结语

感谢您的耐心阅读,希望这篇博客能够为您带来新的视角和启发。如果您觉得内容有价值,不妨动动手指,给个赞👍,让更多的朋友看到。同时,点击关注🔔,不错过我们的每一次精彩分享。若想随时回顾这些知识点,别忘了收藏⭐,让知识触手可及。您的支持是我们前进的动力,期待与您在下一次分享中相遇!

路漫漫其修远兮,吾将上下而求索。

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

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

相关文章

Qt笔记:网络编程UDP

一、铺垫 1.Qt框架使用的网络结构的基础就是Linux学习的网络编程基础;所以使用Qt写客户端,使用Linux写服务端;两者是可以实现互联的 二、UDP 网络编程UDP使用套路: 1.首先在.pro文件中加上network,使Qt可以搭载网络…

Redis存在安全漏洞

Redis是美国Redis公司的一套开源的使用ANSI C编写、支持网络、可基于内存亦可持久化的日志型、键值(Key-Value)存储数据库,并提供多种语言的API。 Redis存在安全漏洞。攻击者利用该漏洞使用特制的Lua脚本触发堆栈缓冲区溢出漏洞,从…

【潜意识Java】蓝桥杯算法有关的动态规划求解背包问题

目录 背包问题简介 问题描述 输入: 输出: 动态规划解法 动态规划状态转移 代码实现 代码解释 动态规划的时间复杂度 例子解析 输出: 总结 作者我蓝桥杯:2023第十四届蓝桥杯国赛C/C大学B组一等奖,所以请听我…

ReactPress 1.6.0:重塑博客体验,引领内容创新

ReactPress 是一个基于Next.js的博客&CMS系统, Github项目地址:https://github.com/fecommunity/reactpress 欢迎Star。 体验地址:http://blog.gaoredu.com/ 今天,我们自豪地宣布ReactPress 1.6.0版本的正式发布,…

单元测试-Unittest框架实践

文章目录 1.Unittest简介1.1 自动化测试用例编写步骤1.2 相关概念1.3 用例编写规则1.4 断言方法 2.示例2.1 业务代码2.2 编写测试用例2.3 生成报告2.3.1 方法12.3.2 方法2 1.Unittest简介 Unittest是Python自带的单元测试框架,适用于:单元测试、Web自动…

带有 Elasticsearch 和 Langchain 的 Agentic RAG

作者:来自 Elastic Han Xiang Choong 讨论并实现 Elastic RAG 的代理流程,其中 LLM 选择调用 Elastic KB。 更多阅读:Elasticsearch:基于 Langchain 的 Elasticsearch Agent 对文档的搜索。 简介 代理是将 LLM 应用于实际用例的…

[react 3种方法] 获取ant组件ref用ts如何定义?

获取ant的轮播图组件, 我用ts如何定义? Strongly Type useRef with ElementRef | Total TypeScript import React, { ElementRef } from react; const lunboRef useRef<ElementRef<typeof Carousel>>(null); <Carousel autoplay ref{lunboRef}> 这样就…

stm32制作CAN适配器5--WinUsb上位机编写

上次我们要stm32制作了一个基于winusb有canfd适配器&#xff0c;今天我们来制作一个上位机程序来进行报文收发。 上位机还是用以前写好的&#xff0c;只是更改下dll文件。 项目链接器&#xff0c;输入&#xff0c;附加依赖项中增加winusb.lib winusb初始化&#xff1a;#incl…

C/C++圣诞树

系列文章 序号直达链接1C/C爱心代码2C/C跳动的爱心3C/C李峋同款跳动的爱心代码4C/C满屏飘字表白代码5C/C大雪纷飞代码6C/C烟花代码7C/C黑客帝国同款字母雨8C/C樱花树代码9C/C奥特曼代码10C/C精美圣诞树11C/C俄罗斯方块12C/C贪吃蛇13C/C孤单又灿烂的神-鬼怪14C/C闪烁的爱心15C…

图解HTTP-HTTP报文

参考资料&#xff1a;图解HTTP HTTP报文 用于HTTP协议交互的信息被称为HTTP报文。请求端的HTTP请求报文&#xff0c;响应端&#xff08;服务器端&#xff09;的叫做响应报文。HTTP报文本身是由多行&#xff08;CR LF作为换行符&#xff09;数据行构成的文本。 请求报文及响…

机器学习基础算法 (一)-线性回归

python 环境的配置参考 从零开始&#xff1a;Python 环境搭建与工具配置 线性回归的 Python 实现 线性回归是一种经典的机器学习算法&#xff0c;用于预测连续的目标变量。它假设目标变量和特征之间存在线性关系。本文将详细介绍线性回归的原理、Python 实现、模型评估和调优&…

Java字符串的|分隔符转List实现方案

字符串处理 问题背景代码实现代码优化原因分析实现方案 注意事项异常处理Maven未识别异常 问题背景 在项目组对账流程中&#xff0c;接收对方系统的对账文件&#xff0c;数据以|为分隔符&#xff0c;读取文件内容&#xff0c;分条入库。 代码实现 Java中将字符串转给list&am…

【HarmonyOs学习日志(14)】计算机网络之域名系统DNS

域名系统DNS 域名系统DNS——从域名解析出IP地址 文章目录 域名系统DNS概述域名到IP地址的解析 互联网的域名结构命名标准 域名服务器域名的解析过程 概述 域名系统DNS&#xff08;Domain Name System&#xff09;是互联网使用的命名系统&#xff0c;用来把便于人们使用的机器…

LabVIEW与PLC点位控制及OPC通讯

在工业自动化中&#xff0c;PLC通过标准协议&#xff08;如Modbus、Ethernet/IP等&#xff09;与OPC Server进行数据交换&#xff0c;LabVIEW作为上位机通过OPC客户端读取PLC的数据并进行监控、控制与处理。通过这种方式&#xff0c;LabVIEW能够实现与PLC的实时通信&#xff0c…

Restaurants WebAPI(四)——Identity

文章目录 项目地址一、Authentication&#xff08;身份认证&#xff09;1.1 配置环境(解决类库包无法引用)1.2 使用Authentication控制Controller的访问1.3 获取User的Context1.3.1 在Application下创建User文件夹1. 创建User.cs record类封装角色信息2. 创建UserContext.cs提供…

Java-32 深入浅出 Spring - IoC 基础 启动IoC 纯注解方式 SpringConfig web.xml

点一下关注吧&#xff01;&#xff01;&#xff01;非常感谢&#xff01;&#xff01;持续更新&#xff01;&#xff01;&#xff01; 大数据篇正在更新&#xff01;https://blog.csdn.net/w776341482/category_12713819.html 目前已经更新到了&#xff1a; MyBatis&#xff…

Android Studio创建新项目并引入第三方so外部aar库驱动NFC读写器读写IC卡

本示例使用设备&#xff1a;https://item.taobao.com/item.htm?spma21dvs.23580594.0.0.52de2c1bbW3AUC&ftt&id615391857885 一、打开Android Studio,点击 File> New>New project 菜单&#xff0c;选择 要创建的项目模版&#xff0c;点击 Next 二、输入项目名称…

Trimble天宝三维激光扫描仪在建筑工程竣工测量中的应用【沪敖3D】

竣工测量是建筑项目竣工阶段的一个至关重要的环节&#xff0c;它为建筑工程的质量验收和成果核查提供了核心的参考依据。传统的竣工测量方法&#xff0c;如全站仪测量&#xff0c;主要依赖于现场人工操作&#xff0c;存在一些明显的局限性&#xff0c;例如作业时间长、工作量大…

java开发入门学习五-流程控制

流程控制语句 if&#xff0c; if...else&#xff0c; if..else if..else 与前端相同 略 switch case 与前端不同的是case不能使用表达式&#xff0c;使用表达式会报错 class TestSwitch {public static void main(String[] args) {// switch 表达式只能是特定的数据类型…

tslib(触摸屏输入设备的轻量级库)的学习、编译及测试记录

目录 tslib的简介tslib的源码和make及make install后得到的文件下载tslib的主要功能tslib的工作原理tslib的核心组成部分tslib的框架和核心函数分析tslib的框架tslib的核心函数ts_setup()的分析(对如何获取设备名和数据处理流程的分析)函数ts_setup()自身的主要代码ts_setup()对…