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

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

🔥 个人主页:星云爱编程

🔥 所属专栏: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.rhkb.cn/news/496037.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

重温设计模式--迭代器模式

文章目录 迭代器模式(Iterator Pattern)概述迭代器模式的结构迭代器模式UML图C 代码示例应用场景 迭代器模式(Iterator Pattern)概述 定义: 迭代器模式是一种行为型设计模式,它提供了一种方法来顺序访问一个…

普通人怎么入门学习并使用AI?

前言 作为普通人看着AI一天一天变革,心急如焚,未来但是就是不知道怎么才算真正进入了AI,使用AI....作为从头至尾追随AI脚步的码农有几点小建议~ 一、💻使用 AI 网站或软件,解决实际问题 不管用哪种AI,先用…

【Compose multiplatform教程08】【组件】Text组件

查看全部组件https://blog.csdn.net/b275518834/article/details/144751353 Text 功能说明:用于在界面上显示文本内容,支持设置字体、大小、颜色、样式(如加粗、斜体、下划线)等属性,满足不同的文本展示需求&#xf…

贪心算法(常见贪心模型)

常见贪心模型 简单排序模型 最小化战斗力差距 题目分析&#xff1a; #include <bits/stdc.h> using namespace std;const int N 1e5 10;int n; int a[N];int main() {// 请在此输入您的代码cin >> n;for (int i 1;i < n;i) cin >> a[i];sort(a1,a1n);…

如何通过 360 驱动大师检查自己电脑上的显卡信息

在深入探讨如何查看显卡信息之前&#xff0c;首先需要了解显卡的基本概念。显卡&#xff08;Graphics Processing Unit, GPU&#xff09;&#xff0c;是计算机中负责处理图形输出到显示器的重要硬件。根据其集成度和性能&#xff0c;显卡通常被分为两类&#xff1a; 集成显卡&…

解线性方程组

直接三角分解&#xff08;LU分解&#xff0c;Doolittle分解&#xff09; ATM分解&#xff08;追赶法&#xff0c;Crout分解&#xff0c;克劳特分解&#xff09; 平方根法&#xff08;Cholesky分解&#xff0c;乔列斯基分解&#xff09; 矩阵的范数

实现点击表格中的邀请码并复制到剪贴板的功能

文章目录 实现步骤修改代码1. 添加复制邀请码的处理函数2. 在表格列中添加点击事件3. 添加样式完整的 invite-code-list.vue 文件 要实现点击表格中的邀请码并复制到剪贴板的功能&#xff0c;可以使用 JavaScript 的 Clipboard API。以下是如何在你的 invite-code-list.vue 文…

clickhouse解决suspiciously many的异常

1. 问题背景 clickhouse安装在虚拟机上&#xff0c;持续写入日志时&#xff0c;突然关机&#xff0c;然后重启&#xff0c;会出现clickhouse可以正常启动&#xff0c;但是查询sql语句&#xff0c;提示suspiciously many异常&#xff0c;如图所示 2. 问题修复 touch /data/cl…

本原多项式

将 G F ( p ) GF(p) GF(p)延伸为有 p m p^m pm个元素的域&#xff0c;称之为 G F ( p ) GF(p) GF(p)的扩域&#xff0c;表示为 G F ( p m ) GF(p^m) GF(pm). G F ( p ) GF(p) GF(p)是 G F ( p m ) GF(p^m) GF(pm)的子集。 G F ( p m ) GF(p^m) GF(pm)元素个数为 p m p^m pm。 …

编译openssl遇到错误Parse errors: No plan found in TAP output的解决方法

在编译openssl时 tar -zxvf openssl-1.1.1p.tar.gz cd openssl-1.1.1p ./config --prefix/usr --openssldir/etc/ssl --shared zlib make make test 遇到错误 Parse errors: No plan found in TAP output 解决方法&#xff1a; yum install perl-Test-Simple

Milvus×EasyAi:如何用java从零搭建人脸识别应用

如何从零搭建一个人脸识别应用&#xff1f;不妨试试原生Java人工智能算法&#xff1a;EasyAi Milvus 的组合拳。 本文将使用到的软件和工具包括&#xff1a; EasyAi&#xff1a;人脸特征向量提取Milvus&#xff1a;向量数据库用于高效存储和检索数据。 01. EasyAi&#xff1a;…

7.C语言 宏(Macro) 宏定义,宏函数

目录 宏定义 宏函数 1.注释事项 2.注意事项 宏(Macro)用法 常量定义 简单函数实现 类型检查 条件编译 宏函数计算参数个数 宏定义进行类型转换 宏定义进行位操作 宏定义进行断言 总结 宏定义 #include "stdio.h" #include "string.h" #incl…

EdgeX Core Service 核心服务之 Core Command 命令

EdgeX Core Service 核心服务之 Core Command 命令 一、概述 Core-command(通常称为命令和控制微服务)可以代表以下角色向设备和传感器发出命令或动作: EdgeX Foundry中的其他微服务(例如,本地边缘分析或规则引擎微服务)EdgeX Foundry与同一系统上可能存在的其他应用程序…

19_HTML5 Web Workers --[HTML5 API 学习之旅]

HTML5 Web Workers 是一种允许 JavaScript 在后台线程中运行的技术&#xff0c;从而不会阻塞用户界面或其他脚本的执行。通过使用 Web Workers&#xff0c;你可以执行复杂的计算任务而不影响页面的响应速度&#xff0c;提升用户体验。 Web Workers 的特点 Web Workers 是 HTM…

数据分析篇001

目录 一、数据是什么&#xff1f; 二、数据能做什么&#xff1f; 三、数据应用四步骤 第一步---搭建数据体系 第二步---积累数据资产 第三步---完成数据分析 第四步---实现数据应用 四、数据的三种性质 变异性 规律性&#xff08;以正态分布为例&#xff09; 客观性…

Java线程池面试题

为什么要用线程池 降低资源消耗&#xff1a;通过重复利用已创建的线程降低线程创建和销毁造成的消耗提高响应速度&#xff1a;当任务到达时&#xff0c;任务可以不需要等到线程创建就能立即执行方便管理线程&#xff1a;线程是稀缺资源&#xff0c;如果无条件地创建&#xff0…

校史馆云展厅适合远程教学吗?

随着信息技术的飞速发展&#xff0c;远程教学已经成为教育领域的一个重要趋势。 校史馆作为学校文化传承的重要场所&#xff0c;承载着丰富的历史信息和教育资源。 那么&#xff0c;将校史馆搬到云端&#xff0c;构建云展厅&#xff0c;是否适合远程教学呢&#xff1f; 下面…

【安全编码】Web平台如何设计防止重放攻击

我们先来做一道关于防重放的题&#xff0c;答案在文末 防止重放攻击最有效的方法是&#xff08; &#xff09;。 A.对用户密码进行加密存储使用 B.使用一次一密的加密方式 C.强制用户经常修改用户密码 D.强制用户设置复杂度高的密码 如果这道题目自己拿不准&#xff0c;或者…

GJB289A总线典型网络理论分析

1.GJB289A总线典型网络理论分析 根据相关标准&#xff0c;“某个支路的故障不影响整个系统”及耦合变压器特性&#xff0c;本文在仿真与实测时均采用典型的一发一收两端口总线网络。 典型两端口总线网络电气结构如图1所示&#xff0c;包含终端匹配电阻、故障隔离电阻、耦合变…

基于SpringBoot的4S店汽车销售管理系统的设计与实现

一、课题背景 为汽车销售公司设计了一个汽车管理系统 技术&#xff1a;前台采用网页技术&#xff0c;后端采用SpringBoottMybatistvue 项目 描述&#xff1a;随着人们生活水平的不断提高&#xff0c;人们对汽车的消费和需求也越来越旺盛。多汽车销售公司仍然采用人工记账的传…