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

embedded/2024/12/27 11:04:46/

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

🔥 个人主页:星云爱编程

🔥 所属专栏: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.ppmy.cn/embedded/149157.html

相关文章

flink-1.16 table sql 消费 kafka 数据,指定时间戳位置消费数据报错:Invalid negative offset 问题解决

1 背景 1.使用 flink-1.16 的 table sql 消费 kafka数据,并使用 sql 计算指标,然后写入 doris; 2.指标计算时,需要统计当日数据条数,考虑到作业异常退出被重新拉起时,需要从零点开始消费,所以…

虚幻引擎结构之UWorld

Uworld -> Ulevel ->Actors -> AActor 在虚幻引擎中,UWorld 类扮演着至关重要的角色,它就像是游戏世界的总指挥。作为游戏世界的核心容器,UWorld 包含了构成游戏体验的众多元素,从游戏实体到关卡设计,再到物…

ffmpeg源码分析(九)解协议

本文将聚焦于FFmpeg协议处理模块,以avformat_open_input函数为核心,详细剖析其在最新FFmpeg源码中的实现。 音视频处理流程简介 avformat_open_input概述 avformat_open_input是FFmpeg用于打开输入多媒体数据的关键函数。它通过统一的接口处理多种协议…

详细介绍Sd-WebUI提示词的语法规则

AI绘画中最大的门槛就是提示词,对英语水平、文学水平、想象力、灵感等要求较高。不能每次一输入正向提示词(positive prompt),就只会写a girl, big eyes, red hair。虽然sd-webui软件可以直接翻译,输入一个子母后会立刻…

重发布技术

重发布 在路由协议的边界设备上,将某一种路由协议的路由信息引入到另一种路由协议中,这个操作被称为路由引入或者路由重分发。----技术本质为重发布。 条件 必须存在ASBR设备(路由边界设备)---同时连接两种协议或两个进程&#…

Linux 下的 GPT 和 MBR 分区表详解

在Linux系统中,分区表是描述存储设备上分区布局和属性的一种结构化数据。常见的分区表格式有MBR(Master Boot Record)和GPT(GUID Partition Table)。以下是这两种分区表的详解: MBR(Master Boot…

二、创建第一个VUE项目

文章目录 一、先决条件二、创建项目1、创建项目2、选择VUE版本3、选择依赖管理器4、创建成功 三、启动并访问启动项目访问结果 一、先决条件 确保已经安装了 Node.js 和 npm(一般安装 Node.js 时会自动安装 npm),并且通过 npm install -g vue…

每天40分玩转Django:实操多语言博客

实操多语言博客 一、今日学习内容概述 学习模块重要程度主要内容国际化配置⭐⭐⭐⭐⭐基础设置、语言切换翻译模型⭐⭐⭐⭐⭐多语言字段、翻译管理视图处理⭐⭐⭐⭐多语言内容展示、URL处理前端实现⭐⭐⭐⭐语言切换、界面适配 二、模型设计 # models.py from django.db im…