009_抽象类和接口

抽象类和接口

  • final关键字
    • 常量
  • 单例模式(设计模式)
  • 枚举类
  • 抽象类
    • 抽象类的注意事项、特点
    • 使用抽象类的好处
    • 模版方法设计模式
  • 接口
    • 接口的好处
    • 接口的注意事项

final关键字

  • final关键字是最终的意思,可以修饰类、方法、变量。
    • 修饰类:该类被称为最终类、特点不能再被继承了。
    • 修饰方法:该方法被称为最终方法,特点是不能被重写。
    • 修饰变量:该变量有且仅能被赋值一次。
  • final修饰基本类型的变量,变量存储的数据不能被改变。
  • final修饰引用类型的变量,变量存储的地址不能被改变,但地址所指向对象的内容是可以被改变的。

常量

  • 使用了static final 修饰的成员变量称为常量。
  • 作用:常用于记录系统的配置信息、
  • 常量命名规范:建议使用大小写英文单词,多个单词使用下划线连接起来。
  • 常量记录系统配置信息的优势、执行原理
    • 代码可读性更好,可维护性也更好。
    • 程序编译后,常量会被"宏替换":出现常量的地方全部会被替换成其记住的字面量,可以保证使用常量和直接用字面量的性能是一样的。

单例模式(设计模式)

  • 设计模式:一个问题通常由n种解法,其中肯定有一种解法是最优解。
  • 设置模式有20多种,对应20多种软件开发中会遇到的问题。
    -单例设计模式
    • 作用:确保某各类中只能创建一个对象。
    • 写法,实现步骤:
      • 把类的构造器私有。
      • 定义一个静态变量记住类的一个对象。
      • 定义一个静态方法,返回对象。
 // 单例类
public class A {// 2、定义一个静态变量记住类的一个对象private static A a = new A();// 1、私有构造器private A(){}// 3、定义一个静态方法返回对象public static A getObject(){return a;}
}
  • 单例类有很多形式
    • 如“饿汉式单例”:拿对象时,对象早就创建好了。
public class A {// 2、定义一个静态变量记住类的一个对象private static A a = new A();// 1、私有构造器private A(){}// 3、定义一个静态方法返回对象public static A getObject(){return a;}
}
  • 如“懒汉式单例”:拿对象时,才开始创建对象。
    • 特点:延迟加载对象
    • 写法:
      • 把类的构造器私有。
      • 定义一个静态变量由于存储对象。
      • 提供一个静态方法,保证返回的是同一个对象。
public class B {// 2、定义一个类变量量用于存储对象private static B b ; // null// 1、单例必须私有构造器private B(){}// 3、提供一个类方法返回类的一个对象public static B getObject(){if(b == null){b = new B();}return b;}
}

枚举类

  • 枚举类是一种特殊类。
  • 写法
修饰符 enum 枚举类名{名称1 ,  名称2, ... ; 其他成员…
}
  • 特点:
    • 枚举类中的第一行,只能写枚举类的对象名称,其要用逗号隔开。
    • 这些名称,本质是常量,每个常量都记住了枚举类的一个对象。
public enum A{
X , Y , Z;
}Compiled from "A.java"
public final class A extends java.lang.Enum<A> {public static final A X = new A();public static final A Y = new A();public static final A Z = new A();public static A[] values();public static A valueOf(java.lang.String);
}
  • 枚举类都是最终类,不可以被继承、枚举类都是继承java.lang.Enun类的。
  • 枚举类的构造器都是私有的(写不写都只能是私有的),因此,枚举类对外不能创建对象。
  • 枚举类很适合做信息分类和标志。

抽象类

  • java中有一个关键字叫:abstract,它就是抽象的意思,可以用它修饰类、成员方法。
  • abstract修饰类,这个类就是抽象类
  • abstract修饰方法,这个方法就是抽象方法。
修饰符 abstract class 类名{ 修饰符 abstract 返回值类型 方法名称(形参列表)}public abstract class A {// 抽象方法:必须abstract修饰,只有方法签名,不能有方法体public abstract void test();}

抽象类的注意事项、特点

  • 抽象类中不一定要有抽象方法,有抽象方法的类必须是抽象类。
  • 类有的成员:成员变量、方法、构造器,抽象类都可以有。
  • 抽象类最主要的特点:抽象类不能创建对象,仅作为一种特殊的父类,让子类继承并实现。
  • 一个类的继承抽象类,必须重写完抽象类的全部抽象方法,否则这个类也必须定义成抽象类。

使用抽象类的好处

  • 父类知道每个子类都要做某个行为,但每个子类要做的情况不一样,父类就定义成抽象方法,交给子类去重写实现,我们设计这样的抽象类,就是为了更好的支持多态。

模版方法设计模式

  • 提供一个方法作为完成某类功能的模版、模版方法封装了每个实现步骤,但允许子类提供特定步骤的实现。
  • 模版方法设计模式可以:提高代码的复用、并简化子类设计。
  • 写法
    • 定义一个抽象类。
    • 在里面定义2个方法
      • 一个是模版方法:把共同的实现步骤放里面去。
      • 一个是抽象方法:不确定的实现步骤,交给具体的子类来完成。
  • 建议使用 final 关键字修饰模版方法
    • 模范方法是给子类直接使用的,不能被子类重写。
    • 一旦子类重写了模版方法,模版方法就失效了。

接口

  • java提供了interface关键字定义接口。
public interface 接口名 {// 成员变量(常量)// 成员方法(抽象方法)
} 
  • 接口不能创建对象,
  • 接口是用来被类实现(implements)的,实现接口的类称为实现类,一个类可以实现多个接口。
修饰符 class 实现类类名 implements 接口1, 接口2, 接口3 , ... {//实现类实现多个接口,必须重写完全部接口的全部抽象方法,否则实现类需要定义成抽象类。
} 

接口的好处

  • 弥补了类单继承的不足,一个类同时可以实现多个接口,使类的角色更多,功能强大。
  • 让程序可以面相接口编程,这样程序员就可以灵活方便的切换各种业务实现(更利于程序的解耦合)。
  • JDK 8开始,接口新增了三种形式的方法
  • 增强了接口的能力,更便于项目的扩展和维护。
public interface A{/*** 1、默认方法(实例方法):使用用default修饰,默认会被加上public修饰。* 注意:只能使用接口的实现类对象调用*/default void test1(){...}/*** 2、私有方法:必须用private修饰(JDK 9开始才支持)*/private void test2(){...}/*** 3、类方法(静态方法):使用static修饰,默认会被加上public修饰。* 注意:只能用接口名来调用。*/static void test3(){...}}

接口的注意事项

  • 接口与接口可以多继承:一个接口可以同时继承多个接口[重点]。
  • 一个接口继承多个接口,如果多个接口中存在方法签名冲突,则此时不支持多继承,也不支持多实现。
  • 一个类继承了父类,又同时实现了接口,如果父类中和接口中有同名的默认方法,实现类会优先用父类的。
  • 一个类实现了多个接口,如果多个接口中存在同名的默认方法,可以不冲突,这个类重写该方法即可。

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

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

相关文章

新潮透明液体水珠水滴失真故障扭曲折射特效海报字体标题设计ps样机动作素材 Bubble Photoshop Templates

只需单击几下即可创建引人注目的视觉效果&#xff01;您需要做的就是将您的文本或图像放入智能对象中并应用作。 包中包含&#xff1a; 15 个静态 Photoshop 模板&#xff08;PS 2019 及更高版本&#xff09; 01-05 垂直布局 &#xff08;22504000&#xff09;06-10 水平布局…

Android DiaLog全屏设置,带有叉号的弹窗,这个弹窗分为两个部分,一个是主体,另一个是关闭部分。自定义布局弹窗

1.先上图。要实现的效果图。 2.这是我自己实现的效果图&#xff0c;是不是跟效果图一摸一样 来看看整体效果 3.我把自己实现的效果图的代码写出来。如下就是我的代码 3.1首先是MainActivity类 import androidx.appcompat.app.AppCompatActivity;import android.app.Alert…

NVR接入录像回放平台用EasyCVR打造地下车库安防:大型商居安全优选方案

一、背景分析 随着居民生活品质的提升&#xff0c;大型商业建筑和住宅小区纷纷配套建设地下停车库。但是地下车库盗窃、失火、恶意毁坏车辆、外部人员随意进出等事件频发&#xff0c;部署视频监控系统成为保障地下车库的安全关键举措。 目前&#xff0c;很多商业和住宅都会在…

阶段测试 【过程wp】

分享总结: 回顾起来,真的感慨很多呀。看着并不难啊,但难的是解题思维:如何判断该页面的关键点,快速地确定问题的核心,找到对应的解决方法。达到便捷、高效的得到结果。我们做了整整近七个半小时。在这个过程中,我发现自己的思维钝化,不太能自主高效地划分判断漏洞类型,…

【C++】<STL部分>:STL标准模板库概要

STL(standard template libaray-标准模板库)&#xff0c;是C标准库的重要组成部分&#xff0c;包含了很多常用的数据结构和算法。 在我们学习了模板的之后&#xff0c;再来看STL&#xff0c;就能知道它是C标准库中的模板类和模板函数的集合&#xff0c;作为可复用的库大大提高…

从传递函数到PID控制器

在过程控制中&#xff0c;按偏差的比例&#xff08;P&#xff0c;Proportional&#xff09;、积分&#xff08;I&#xff0c;Integral&#xff09;和微分&#xff08;D&#xff0c;Differential&#xff09;进行控制的PID控制器&#xff08;亦称PID调节器&#xff09;是应用最为…

【PVR Review】《A Review of Palmar Vein Recognition》

[1]张秀峰,牛选兵,王伟,等.掌静脉识别研究综述[J].大连民族大学学报,2020,22(01):33-37.DOI:10.13744/j.cnki.cn21-1431/g4.2020.01.007. 文章目录 1、背景2、手掌静脉识别方法2.1、传统手掌静脉图像识别方法2.2、基于深度学习的掌静脉图像识别 3、手掌静脉识别难点 1、背景 目…

vector复制耗时

CPP中的vector对象在传参给子函数时&#xff0c;如果直接传参&#xff0c;会造成复制给形参的额外耗时 如何解决这个问题呢&#xff1f; 这样定义局部函数 const vector <int>&vec可以保证传递vector对象时使用地址传递&#xff0c;并且使用const保证vector不被改变…

算法思想之双指针

文章目录 双指针字符串序列判定字符串所有整数最小和服务交换接口失败率分析分披萨最多团队 双指针 双指针是指在解决问题时使用两个指针&#xff0c;通常分别指向数组或字符串中的不同位置&#xff0c;通过移动这两个指针来解决问题的一种技巧。双指针技巧常用于解决数组、链…

学透Spring Boot — 018. 优雅支持多种响应格式

这是我的专栏《学透Spring Boot》的第18篇文章&#xff0c;想要更系统的学习Spring Boot&#xff0c;请访问我的专栏&#xff1a;学透 Spring Boot_postnull咖啡的博客-CSDN博客。 目录 返回不同格式的响应 Spring Boot的内容协商 控制器不用任何修改 启动内容协商配置 访…

ngx_os_init

定义在 src\os\unix\ngx_posix_init.c ngx_int_t ngx_os_init(ngx_log_t *log) {ngx_time_t *tp;ngx_uint_t n; #if (NGX_HAVE_LEVEL1_DCACHE_LINESIZE)long size; #endif#if (NGX_HAVE_OS_SPECIFIC_INIT)if (ngx_os_specific_init(log) ! NGX_OK) {return NGX_ERR…

深信服护网蓝初面试题

《网安面试指南》https://mp.weixin.qq.com/s/RIVYDmxI9g_TgGrpbdDKtA?token1860256701&langzh_CN 5000篇网安资料库https://mp.weixin.qq.com/s?__bizMzkwNjY1Mzc0Nw&mid2247486065&idx2&snb30ade8200e842743339d428f414475e&chksmc0e4732df793fa3bf39…

游戏引擎学习第206天

回顾并为当天的工作定下目标 接着回顾了前一天的进展。之前我们做了一些调试功能&#xff0c;并且已经完成了一些基础的工作&#xff0c;但是还有一些功能需要继续完善。其中一个目标是能够展示实体数据&#xff0c;以便在开发游戏逻辑系统时&#xff0c;可以清晰地查看和检查…

HTML 表单:构建交互式网页的关键元素

HTML 表单:构建交互式网页的关键元素 引言 HTML表单是构建交互式网页的核心组件之一,它允许用户与网站进行交互,提交信息、填写问卷或进行其他操作。本文将深入探讨HTML表单的基础知识、常用元素、表单验证以及如何优化表单设计,以提高用户体验和网站的可访问性。 HTML表…

Qt音频采集:QAudioInput详解与示例

1. 简介 QAudioInput是Qt Multimedia模块中用于音频采集的核心类&#xff0c;能够从麦克风等输入设备实时获取原始音频数据&#xff08;PCM格式&#xff09;。本文将通过原理讲解和代码示例&#xff0c;帮助开发者快速掌握音频采集的核心技术。 2. 核心功能 支持多种音频格式&…

下载安装Node.js及其他环境

提示&#xff1a;从Node版本降级到Vue项目运行 文章目录 下载Node.js环境配置配置环境变量 安装 cnpm&#xff08;我需要安装&#xff09;安装脚手架安装依赖安装淘宝镜像&#xff08;注意会更新&#xff09;cnpm vs npm 与新旧版本核心差异包管理器不同功能差异如何选择&#…

【后端】ORM / ODM

长期不定期更新&#xff0c;建议关注收藏点赞。 概述 ORM&#xff08;Object-Relational Mapping&#xff0c;对象关系映射&#xff09;&#xff1a;面向关系型数据库&#xff0c;ORM将对象映射到数据库的表和行&#xff08;例如MySQL、PostgreSQL&#xff09;。ODM&#xff0…

无限滚动(Infinite Scroll)页面谷歌不收录!必须改回分页吗?

近三年&#xff0c;全球超过58%的网站采用无限滚动设计&#xff08;数据来源&#xff1a;PageTraffic 2023&#xff09; 谷歌官方数据显示&#xff0c;动态加载内容的索引失败率高达73%&#xff08;Google Webmaster Report 2022&#xff09;&#xff0c;而采用纯无限滚动的页…

手写JSX实现虚拟DOM

&#x1f90d; 前端开发工程师、技术日更博主、已过CET6 &#x1f368; 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 &#x1f560; 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》、《前端求职突破计划》 &#x1f35a; 蓝桥云课签约作者、…

网络性能优化参数关系解读 | TCP Nagle / TCP_NODELAY / TCP_QUICKACK / TCP_CORK

注&#xff1a;本文为 “网路性能优化” 相关文章合辑。 未整理去重。 如有内容异常&#xff0c;请看原文。 TCP_NODELAY 详解 lenky0401 发表于 2012-08-25 16:40 在网络拥塞控制领域&#xff0c;Nagle 算法&#xff08;Nagle algorithm&#xff09;是一个非常著名的算法&…