[Java]面向对象-抽象类/方法接口适配器设计模式

news2025/1/9 16:56:43

抽象类

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

定义格式:

如果一个类包含抽象方法,那么该类必须是抽象类。注意:抽象类不一定有抽象方法,但是有抽象方法的类必须定义成抽象类。

abstract class 类名字 { 
  
}
注意事项:
  •  抽象类不能实例化
  • 抽象类不一定有抽象方法,有抽象方法的类一定是抽象类
  • 可以有构造方法
  • 抽象类的子类(1.要么重写抽象类中所有的抽象方法 2.要么是抽象类)

抽象方法

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

定义格式:

使用abstract关键字修饰方法,该方法就成了抽象方法,抽象方法只包含一个方法名,而没有方法体。

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

例如:public abstract void run();

抽象类抽象方法的意义: 

开发过程中,有多个人对一个项目进行开发,当两个对象有相同的行为方法的时候,很难保证统一,采用子类继承抽象类的方法可以保证子类中继承的抽象方法必须重写。抽象类存在的意义是为了被子类继承,否则抽象类将毫无意义。抽象类可以强制让子类,一定要按照规定的格式进行重写。

 接口

接口是更加彻底的抽象,JDK7之前,包括JDK7,接口中全部是抽象方法。接口同样是不能创建对象的

//接口的定义格式:
interface 接口名称{
 // 抽象方法
}
// 接口的声明:interface
// 接口名称:首字母大写,满足“驼峰模式”
  •  接口不能实例化
  • 接口和类之间的关系,通过implements关键字表示(public class 类名 implements 接口名{})
  • 接口的子类(实现类)-要么重写接口中所有的抽象方法,要么是抽象类

注意:

1.接口和类之间可以是一点一的关系,也可以是一对多的关系

例如:public class 类名 implements 接口1,接口2{}

2.实现类可以继承一个类的同时实现多个接口

例如:public class 类名extends父类 implements 接口1,接口2{}

接口中成员的特点: 
1.成员变量:

只能是常量

默认修饰符:public static final

2.构造方法

接口没有构造方法

3.成员方法

只能是抽象方法

默认修饰符:public abstract

JDK7之前:接口中只能定义抽象方法

JVM内查看工具:

接口和类之间的关系: 
类和类:

继承关系,只能单继承,不能多继承,可以多层继承

类和接口:

实现关系,可以单实现,也可以多实现,还可以在继承一个类的同时实现多个接口

实现多个接口时候若有同名的方法重写一次即可

接口和接口:

继承关系,可以单继承,也可以多继承

注:如果实现类实现了最下面的子接口,那么就需要重写所有的抽象方法

public class Test implements SUN{//sun extends fu、zi
    @Override
    public void method3() {
    }//sun
    @Override
    public void method1() {
    }//fu
    @Override
    public void method2() {
    }//zi
}
 JDK8接口新特性:
方法体:

Jdk8之前,只要接口中添加了新的方法,若调用接口的类不重写接口中新增的方法该类就会报错。

Jdk8之后,接口可以定义有方法体的方法,在对接口中添加新方法时,实现类不需要立马修改,等用到某个规则时再重写。


Jdk7之前:接口中只能定义抽象方法

Jdk8:接口中可以定义有方法体的方法(默认静态)

Jdk9:接口可以定义私有方法


Jdk8以后接口新增方法:

允许接口中定义默认方法,需使用关键字Default修饰

作用:解决接口升级问题

接口默认方法定义格式:

格式:public default 返回值类型 方法名(参数列表){}

范例:public default void show(){}

注意:

默认方法不是抽象方法,不强制重写。若要重写需去掉default关键字

public可以省略,default不能省略

如果实现了多个接口,多个接口中存在相同名字的默认方法,子类就必须对该方法进行重写 

public interface inter {
    public abstract void method();
    public default void show(){
        System.out.println("接口 default");
    }
}
 静态方法:

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

定义格式:

格式:public static 返回值类型 方法名(参数列表){}

范例:public static void show()

注意事项:

静态方法只能通过接口名调用 ,不能通过实现类名或者对象名调用 

public可以省略,static不可以省略

public interface inter {
    void method();
    public static void show(){
        System.out.println("inter static");
    }
}

===========================================
public class main {
    public static void main(String[] args) {
        demo7 demo7 = new demo7();
        demo7.method();
        inter.show();
    }
}

Jdk9接口新特性:

 私有方法,将抽取出来的不想被别人访问的方法私有化

定义格式:

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

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

 

public interface inter {
    public default void show1(){
        System.out.println("hello");
        log();
    }
    public default void show2(){
        System.out.println("hello");
        log();
    }
    private void log(){
        System.out.println("log");
    }
}
  1. 接口代表规则,是行为的抽象。想要让哪个类拥有一个行为,就让这个类实现对应的接口就可以了
  2. 当一个方法的参数是接口时,可以传递接口所有实现类的对象,这种方式称为接口多态 

设计模式:适配器

设计模式:是一套被方法使用,多数人知晓的,经过分类编目的,代码设计经验的总结。

使用设计模式是为了可重用代码,让代码更容易被他人理解,保证代码可靠性、程序的重用性

简而言之:设计模式就是各种套路

适配器模式:在实现类和接口之间添加一个抽象类,抽象类(父)中重写接口中所有的方法但是没有方法体。实现类(子)继承抽象类需要使用接口中的哪个方法就重写抽象类中接口的方法

  • 当一个接口中抽象方法过多,但我们只需要使用其中一部分的时候,就可以适配器设计模式
  • 书写步骤:

                      1.编写中间类xxxAdapter,实现对应接口。

                      2.对接口中的抽象方法进行空实现

                      3.实现类继承中间类,并重写需要用的方法

                      4.为了避免其他类创建适配器的对象,中间的适配器类用abstract进行修饰

                           

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

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

相关文章

haproxy七层代理详解之-完整安装部署流程及负载均衡实现-及热更新方法

一.负载均衡 1.1负载均衡时什么 负载均衡:Load Balance,简称LB,是一种服务或基于硬件设备等实现的高可用反向代理技术,负载均网络流量等)分担给指定的一个或多个后端特定的服务器或设备,从而提高了衡将特定的业务(web服务、公司…

嵌入式生物打印是什么?有啥优势?

大家好,今天我们来了解一下这篇《Embedded 3D bioprinting–An emerging strategy to fabricate biomimetic & large vascularized tissue constructs》发表于《Bioactive Materials》的一篇综述,在组织工程和再生医学领域,传统方法存在一…

【JUC】04-synchronized关键字

1. 悲观锁与乐观锁 悲观锁:认为自己在使用数据的时候一定会有别的线程来修改数据,因此在获取数据的时候会先加锁,确保数据不会被别的线程修改。synchroized和Lock的实现类都是乐观锁:认为自己在使用数据时不会有别的线程修改数据…

激光尘埃粒子计数器在洁净室监测中的关键应用(原理、类型、选型)

激光尘埃粒子计数器的应用 激光尘埃粒子计数器广泛应用于多个领域,包括但不限于: 权威机构:如血液中心、防疫站、疾控中心、质量监督所等。 生产企业和科研部门:如电子行业、制药车间、半导体、光学或精密机械加工、塑胶、喷漆…

构建流水线生产管理创新的RFID智能管理系统应用方案

在当今竞争激烈的制造业环境中,流水线生产的高效、精准和智能化管理已成为企业获取竞争优势的关键。然而,传统的流水线生产管理方式在应对日益复杂的生产需求和多变的市场环境时,逐渐暴露出诸多难点和痛点。 一、流水线生产管理的难点与痛点…

OCR调研

OCR调研 一、介绍 OCR(Optical Character Recognition,光学字符识别)是一种将图像中的文字转换为计算机可处理格式的技术。OCR技术经历了从传统OCR到基于深度学习的OCR的转变。深度学习OCR技术通过模拟人脑神经元结构处理文本和图像数据&am…

打造高效存储与访问体验:NFS共享携手Nginx负载均衡,赋能企业级数据流通与性能优化

作者简介:我是团团儿,是一名专注于云计算领域的专业创作者,感谢大家的关注 座右铭: 云端筑梦,数据为翼,探索无限可能,引领云计算新纪元 个人主页:团团-CSDN博客 目录: 前言&#…

AIGC实践|AI助力一张照片生成百变写真

前言: 在之前的文章中,我们已经领略了 AI 在动态有声绘本、小游戏开发、视频短片制作以及包装设计等领域的神奇应用,在本篇文章中,我将尝试利用AI辅助,使用一张照片生成个性化写真集。充分满足工作艺术照、各地郊游打…

关于自己部署AI大模型踩的坑(二)—— GPU篇

最近一直在研究如何打算属于我自己的J.A.R.V.I.S.(钢铁侠中的机器人管家)。 上一篇写了我最近在部署自己的大模型,使用llama3.1, 和通义千问2。虽然最终结果也是成功了,过程却十分地坎坷。 所以这一篇文章一是总结其中…

linux学习--第一天

--linux基础命令 -本地安装 1. sudo dpkg -i 软件包 :安装单个软件包 2. sudo dpkg -i * .deb :安装多个软件包 3. sudo dpkg -L 软件包:列出软件在系统中文件路径 4. sudo dpkg -s 软件包:列出软件包的安装状态 5. …

页面布局-1

1.定位 CSS 属性名功能属性值position设置定位 static:不定位,默认值。 relative:相对定位。 absolute:绝对定位。 fixed:固定定位 left与参照点左侧距离长度right与参照点右侧距离长度top与参照点上侧距离长度bottom…

【数据结构初阶】队列

hello! 目录 一、概念与结构 二、队列的实现 Queue.h Queue.c test.c 一、概念与结构 1、概念:只允许在一端进行插入数据操作,在另一端进行删除数据操作的特殊线性表,队列具有先进先出的特性。 入队列:进行插入操作…

音视频概要

YUV原理的讲解 YUV是一种常见的视频像素格式,经常用在视频编解码上面,YUV分别由Y分量和U、V分量(红色投影Cr)组成。Y分量指的是亮度分量,也就是我们经常说的灰阶值,相当于一副灰色的图像。而U分量和V分量表示的是色度分量&#x…

搭建高可用OpenStack(Queen版)集群(九)之部署nova计算节点

一、搭建高可用OpenStack(Queen版)集群之部署计算节点 一、部署nova 1、安装nova-compute 在全部计算节点安装nova-compute服务 yum install python-openstackclient openstack-utils openstack-selinux -y yum install openstack-nova-compute -y 若yu…

基于vue框架的《大学计算机》课程思政资源共享平台ac9s7(程序+源码+数据库+调试部署+开发环境)系统界面在最后面。

系统程序文件列表 项目功能:学生,教师,教研小组,章节分类,课程内容,资源类型,资源信息 开题报告内容 基于Vue框架的《大学计算机》课程思政资源共享平台 开题报告 一、引言 随着教育信息化的深入发展,高等教育领域对课程思政的重视程度日益提升。《大…

【kubernetes】pod控制器详解

一、pod控制器概述 1、Pod控制器作用 Pod控制器,是用于实现管理pod的中间层,确保pod资源符合预期的状态,pod的资源出现故障时,会尝试进行重启,当根据重启策略无效,则会重新新建pod的资源。 2、pod控制器…

Ethercat学习-SOEM主站源码解析(DC部分)

文章目录 SOEM DC模式源码简介示例用图ecx_porttimeecx_parentportecx_configdc如果从站不支持DC如果从站支持DC SOEM DC模式源码简介 示例用图 本文中都会围绕着这个图来讲,从站的port编号依次为0,3,1,2 在SOEM中,与…

C++11相关新特性(列表初始化、右值引用、可变参数模版)

目录 C11相关新特性 列表初始化 初始化简单变量 初始化容器 decltype关键字 C 11新增的容器 左值引用和右值引用 左值与右值 左值引用与右值引用 左值引用和右值引用的相互转化 右值引用的使用 拷贝构造函数与移动构造函数 赋值重载函数与移动赋值重载函数 元素插…

ZABBIX邮件监控发送信息

前言:本地邮箱,第三方邮箱,第三方邮箱加脚本 1、本地邮箱测试 #cd /home # ls laiyingx [rootzabbix ~]# vim /etc/postfix/main.cf /mydestination $myhostname, localhost.$mydomain, localhost,$mydomain [rootzabbix ~]# systemctl…

Python 函数返回yield还是return?这是个问题

如果你刚入门 Python,你可能之前没有遇到过yield。虽然它看起来很奇怪,但它是你编码工具库中的一个重要工具。在成为 Python 大师的道路上,你必须掌握它。 返回列表的函数 假设有一个函数,它可以一次性生成一系列值,…