Java - 提高(1) - 抽象类与接口

Qt (高仿Visio)流程图组件开发(一) 效果展示及基本开发框架构思 最近因为工作原因需要使用Qt开发一个类似于Visio的流程图组件,需满足基本的流程图功能,图元类型可自定义扩展,不同图元存有各类自定义数据,可以保存为xml文件,可以读取xml文件生成流程图等等。 阅读详情

Java基础系列学习笔记

参考资料来源 :

http://www.cnblogs.com/chenssy/

<Java编程思想> , 以及其他网络上的学习资料

如有错误 , 烦请指正 , 欢迎讨论


抽象类

在面向对象的领域中一切都是对象,同样所有的对象都是通过类来描述的,但并不是所有的类都来描述对象的.
如果一个类没有足够的信息来描述一个具体对象,而需要其他具体的类来支撑它,那这样的类,我们称之为抽象类.


在面向对象领域由于抽象的概念在问题领域没有对应的具体概念,所以抽象概念的抽象类是不能实例化的.
同时,抽象类体现了数据抽象的思想,是实现多态的一种机制.
它定义了一组抽象的方法,至于这组抽象方法的具体表现形式由派生类来实现.
同时抽象类提供了继承的概念,它的出发点就是为了继承,否则它没有存在的任何意义.

所以说,定义的抽象类一定是用来继承的.


包含了抽象方法的类叫作"抽象类".如果一个类里包含了一个或多个抽象方法,类就必须指定成抽象类.

即使不包括任何 abstract 方法,亦可将一个类声明成“抽象类”。
如果一个类没必要拥有任何抽象方法,而且我们想禁止那个类的所有实例,这种能力就会显得非常有用。

如果从一个抽象类继承,而且想生成新类型的一个对象,就必须为基础类中的所有抽象方法提供方法定义。


使用抽象类时需要注意以下几点:
1. 抽象类不能被实例化,实例化的工作应该由它的子类来完成,他只需要有一个引用即可.
2. 抽象方法必须由子类来进行重写
3. 只要包含一个抽象方法,该类必定要定义成抽象类
4. 抽象类中可以包含具体的方法,也可以不包含
5. 子类中的抽象方法不能与父类的抽象方法同名
6. abstract不能与final并列使用
7. abstract 不能与private、static、final或native并列修饰同一个方法


我们来举个栗子:

	//抽象父类 
	public abstract class Animal {
	        public abstract void cry();
	}
	
	//子类
	public class Cat extends Animal {
	        @Override
	        public void cry() {
	                System.out.println("猫...");
	        }
	}
	//子类
	public class Dog extends Animal {
	        @Override
	        public void cry() {
	                System.out.println("狗...");
	        }
	}
	
	public static void main(String[] args) {
	        Animal cat = new Cat();
	        Animal dog = new Dog();
	        cat.cry();
	        dog.cry();
	}
	
	输出:
	        猫...
	        狗...
	
创建抽象类和抽象方法非常有用,因为它们可以使类的抽象性明确起来,并告诉用户和编译器打算怎么使用它们.

抽象类还是有用的重构器,因为它可以使我们很容易的将公共方法沿着集成层次结构向上移动.


接口

"interface"接口关键字 使抽象的概念更深入了一层。我们可以将其想象为一个"纯抽象类",不过要明确的一点是:接口本身不是类。

它允许创建者规定一个类的基本形式:方法名,自变量列表以及返回类型,但不规定方法主体。

接口只是一种形式,并不提供实现的细节。

接口是用来建立类与类之间协议,所提供的一种形式,而没有具体的实现。
同时实现该接口的实现类必须实现该接口的所有方法。

接口是抽象类的衍生,java了保证数据安全是不能多重继承的,也就是说继承只能存在一个父类,但是接口不同,
一个类可以同时实现多个接口,不管这些接口之间有没有关系,所以接口弥补了抽象类不能多重继承的缺陷,
但是推荐继承和接口共同使用,因为这样既可以保证数据安全性又可以实现多重继承。


在使用接口的过程中需要注意如下几个问题:
1. Interface接口的所有方法访问权限会自动声明为public。
2. 接口中可以定义"成员变量" 或者说是 "不可变的变量",因为接口中的"成员变量"会自动变为"public static final",可以通过类名直接访问。
3. 接口中不存在实现的方法
4. 实现接口的非抽象类必须要实现该接口的所有方法。抽象类可以不用实现。
5. 不能使用new操作符实例化一个接口
6. 在实现多接口的时候一定要避免方法名的重复



抽象类与接口的区别

(这个我觉得原博主总结的非常好呀)

1. 语法层次
抽象类方式中,抽象类可以拥有任意范围的成员数据,同时也可以拥有自己的非抽象方法。
但是接口方式中,它仅能有静态变量,不能修改成员数据(我们一般不在接口中使用成员变量),从某种程度上讲,接口是抽象类的特殊化。

抽象类中的抽象方法 访问类型可以使用 public,protected
接口中的方法只能是 public


2. 设计层次
i. 抽象层次不同
抽象类是对类抽象,而接口是对行为抽象。
抽象类是对整个类 整体进行抽象,包括属性,行为,但是接口却是对类的局部(行为)进行抽象。

ii. 跨域不同
抽象类所跨域的是具有相似特点的类,而接口却可以跨域不同的类。
抽象类是从子类中发现公共部分,然后泛化成抽象类,子类继承该父类即可,但是接口不同,实现它的子类可以不存在任何关系。

例如猫、狗可以抽象成一个动物类抽象类,具备叫的方法。
鸟、飞机可以实现飞Fly接口,具备飞的行为,这里我们总不能将鸟、飞机共用一个父类吧!

所以说抽象类所体现的是一种继承关系,要想使得继承关系合理,父类和派生类之间必须存在"is-a" 关系,即父类和派生类在概念本质上应该是相同的。
对于接口则不然,并不要求接口的实现者和接口定义在概念本质上是一致的, 仅仅是实现了接口定义的契约而已。

iii. 设计层次不同
对于抽象类而言,它是自下而上来设计的,我们要先知道子类才能抽象出父类,而接口则不同,
它根本就不需要知道子类的存在,只需要定义一个规则即可,至于什么子类、什么时候怎么实现它一概不知。

比如我们只有一个猫类在这里,如果你这是就抽象成一个动物类,是不是设计有点儿过度?
我们起码要有两个动物类,猫、狗在这里,我们在抽象他们的共同点形成动物抽象类吧!
所以说抽象类往往都是通过重构而来的!

但是接口就不同,比如说飞,我们根本就不知道会有什么东西来实现这个飞接口,怎么实现也不得而知,
我们要做的就是事前定义好飞的行为接口。
所以说抽象类是自底向上抽象而来的,接口是自顶向下设计出来的。


YOLOv11涨点改进 | Neck改进篇 | YOLOv11引入 BiFPN双向特征金字塔网络,显著提升了多尺度特征融合效率 本文介绍了基于BiFPN特征融合模块优化的YOLOv11目标检测模型。BiFPN通过双向跨尺度连接和加权特征融合机制,显著提升了多尺度特征融合效率。该方法在COCO数据集上实现了55.1AP的检测精度,同时大幅降低计算成本(减少13-42倍FLOPs)。文章详细解析了BiFPN模块结构、核心代码实现方法,并提供了YOLOv11-BiFPN配置文件的修改指导,为计算机视觉领域提供了一种高效的目标检测解决方案。 阅读详情

相关推荐

unity打包流程整理-Windows/Mac/Linux平台

1.Platform(平台)功能: 选择目标构建的目标平台选项PC, Mac & Linux Standalone: 适用于 Windows、Mac 和 Linux 平台2.Target Platform(目标平台)功能: 选择具体的操作系统版本选项Windows: 针对 Windows 操作系统Mac: 针对 macOS 操作系统Linux: 针对 Linux 操作系统3.Architecture(架构)功能: 选择应用程序的目标处理器架构选项x86: 针对 32 位系统。

weixin_42333247的博客 5138

Java面试题--基础知识部分

一些Java基础,收集了一些基本的Java面试基础知识,总结如下: 1、面向对象的特征有哪些方面 1.抽象: 抽象就是忽略一个主题中与当前目标无关的那些方面,以便更充分地注意与当前目标有关的方面。抽象并不打算了解全部问题,而只是选择其中的一部分,暂时不用 部分细节。抽象包括两个方面,一是过程抽象,二是数据抽象。 2.继承: 继承是一种联结类的层次模型,并且允许和鼓励类的重用,...

weixin_30802273的博客 1万+

基于Python的信用卡欺诈检测机器学习案例报告

当今时代,在线支付已成为一种高效便捷的支付方式,我们可以突破时间和空间的限制,输入我们的信用卡各项信息就可以完成在线支付。但随之而来的是这种支付方式也具备一定的风险性,我们无法辨别对方是否是恶意套取我们资金的非法分子。当信用卡信息数据泄露导致金钱失窃并最终失去客户忠诚度和公司声誉时,组织、消费者、银行和商家都会面临风险。2017 年,未经授权的信用卡操作达到了惊人的 1670 万受害者。此外,据美国联邦贸易委员会 (FTC) 报告,2017 年信用卡欺诈索赔数量比上一年高出 40%。

weixin_45673389的博客 6695

Java学习笔记之接口和抽象类

前言 最近遇到了接口和抽象类的使用,搞不明白二者的区别,所以特地研究了下而这,笔记如下。 接口和抽象类的定义 抽象类:包含抽象方法的一个类叫做“抽象类”。 接口:可将其想象成为一个“纯”抽象类,它只声明类方法,不提供方法的实现细节。 接口和抽象类的特点 抽象类: 1.如果一个类A继承了抽象类B,并且没有实现抽线类B中的抽象方法,

LYH66的专栏 955

【obj To 3DTiles 进阶实战】 从零配置地理坐标系与扩展属性元数据

本文详细解析了如何将OBJ模型转换为3DTiles格式,重点介绍了地理坐标系配置与属性元数据扩展的实战技巧。通过obj23dtiles工具,开发者可以精准定位模型经纬高坐标,并添加结构化属性表,实现城市规划模型在数字孪生平台的高效应用。

weixin_27215337的博客 367

毕设分享|基于16单片机的指纹识别电子密码锁设计

我们今天的工作生活中,很多的场合都需要身份的认证,而传统的基于标志的身份认证技术由于受到证件伪造以及密码破解等手段的威胁,逐渐表现得有些力不从心。怎样保护自己的重要文件资料,如何保证自己的隐私不被泄露?在传统的身份认证中,我们往往使用密码加密法,但是这种方法只是"防君子不防小人"。在高明的黑客眼里,由几个字符组成的密码脆弱得不堪一击。现在,科技的发展让我们有了新的选择——生物识别技术。将生物识别技术应用于笔记本、门锁等方面,可以对文件、财产起保护作用,并且可以进行身份识别。

Sen_091的博客 1021

java 抽象方法必须被重写么_java中,一个类实现某个接口,必须重写接口中的所有方法吗...

不一定,关键要看子类是否是抽象类。如果子类是非抽象类,则必须实现接口中的所有方法;如果子类是抽象类,则可以不实现接口中的所有方法,因为抽象类中允许有抽象方法的存在!1、抽象类定义抽象类往往用来表征对问题领域进行分析、设计中得出的抽象概念,是对一系列看上去不同,但是本质上相同的具体概念的抽象。通常在编程语句中用 abstract 修饰的类是抽象类。在C++中,含有纯虚拟函数的类称为抽象类,它不能生成...

weixin_36320395的博客 3819

Marin说PCB之LPDDR5的布线注意事项--01

以上就是本期所有内容了,有些是通用的LPDDR5的设计准则,有的是针对单板的设计规则,严格意义说是没有哪一种规则是完全适用的LPDDR5的 通用规则的,不同的单板可能板厚,板材,层数,SOC以及DDR的型号都是不同的,一般的做法就是严格按照SOC手册上的LPDDR5的要求加上仿真同事给的建议修改优化就好了,我们下期文章不见不散。我们知道想要做好一个LPDDR颗粒,需要考虑的是因素有很多例如,电源完整性,信号完整性,层叠的设计,布局的摆放,布线的合理规划,去耦电容的摆放等等。

weixin_45223454的博客 3163

java提高篇(1)-----抽象类与接口

转自http://blog.youkuaiyun.com/chenssy/article/details/12858267 接口和内部类为我们提供了一种将接口与实现分离的更加结构化的方法。        抽象类与接口是Java语言中对抽象概念进行定义的两种机制,正是由于他们的存在才赋予java强大的面向对象的能力。他们两者之间对抽象概念的支持有很大的相似,甚至可以互换,但是也有区别

ddd_1206的博客 282

Teams会议翻译对比测试:Copilot同传 vs 人工翻译,结果出乎意料

本文通过对比测试Microsoft 365 Copilot的实时翻译与专业人工翻译在Teams会议中的表现,揭示了AI同传技术在准确率、响应速度和多语言切换方面的优势与局限。实验数据显示,Copilot在常规商务场景下接近人工翻译水平,且成本效益显著,但在专业术语和文化特定表达上仍需人工辅助。

weixin_29054195的博客 224

使用Simulink进行基于IIR滤波器的设计与稳定性分析仿真

IIR滤波器的稳定性与其系统函数的极点位置密切相关。如果所有极点都位于Z平面的单位圆内,则该滤波器是稳定的;否则,滤波器将是不稳定的。在设计IIR滤波器时,确保其稳定性对于避免输出信号发散至关重要。明确你的系统需求,比如输入信号类型(如正弦波)、采样率、IIR滤波器的设计参数(如滤波器类型、阶数、截止频率等)。假设我们需要设计一个低通IIR滤波器,用来去除高于500Hz的所有频率成分,保留低于500Hz的信号成分。采样率为8kHz。

xiaoheshang_123的博客 150

深入浅出:Java 抽象类与接口

接口是一种特殊的抽象类,它用于定义类应该遵循的行为(方法签名)。接口只包含常量和抽象方法的声明,不包含任何实现。一个类实现接口后,必须提供接口中所有方法的具体实现。接口常用于定义一些公共行为,不关心具体的实现方式。它们在编程中具有重要的地位,能够有效提高代码的灵活性和可维护性。它被用来作为其他类的基类,以提供一些通用的功能和属性,子类可以继承并实现其中的抽象方法。默认方法允许接口在不影响实现类的情况下为接口添加方法实现。接口中的静态方法可以像普通类的静态方法一样被调用,而不需要实现类来实现它。

2302_79376097的博客 6208

SAP ABAP 如何实现物料主数据接口的增量传输机制?

如何实现物料主数据接口的增量传输机制?我在各客户系统中看到了五花八门的实现方式,即使是 IBM 实施的开发质量也并没有保证。其实这是一个很简单的问题,下面以物料主数据接口为例子,介绍 SAP 中更改文档对象的接口数据增量传输机制。

SAP李斌,本人承诺所有原创文章均不使用任何AI生成技术,请大家放心阅读。 1316

【java】抽象类和接口

作者还是一个萌新,如果有什么讲的不对的地方欢迎在评论区指出,希望能够和你们一起进步✊。

acm_pn的博客 1350

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

Java中抽象类与接口详解

private我们已经知道,抽象类就是为了被继承,但是private修饰的并不支持继承,自然抽象类中也不能有private修饰了finalfinal修饰的类不支持继承,所以也不能与抽象类中abstract在一起使用static抽象方法不能用static修饰,static修饰的方法是类级别的方法,不是对象级别的方法.而抽象类使用来被继承的.首先抽象类是半抽象的,接口是完全抽象的,这也决定了他们的不同1.一个类可以实现(implements)多个接口,但是一个普通类只能继承(extends)一个抽象类。

qm_hu的博客 1497

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

Java中抽象类与接口的详细说明

首先简单的介绍一下抽象类: 定义是很简单的,我们这里不写官方的语言,我自己看着都烦,我们就用白话介绍,抽象类本质是一个类,没...

5394

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

java基础 接口 JDK1.8之前和之后的差别 面向接口编程 抽象类与接口的异同

Java笔记之接口接口定义语法 接口 定义 指系统对外提供的所有服务(interface定义的实实在在的接口,即接口类型)【只能有抽象方法】 语法

weixin_45279447的博客 2143

Java【抽象类和接口】是什么?

记录学习过程——Java【抽象类和接口】

yzhcjl_的博客 2175

JAVA-抽象类和接口

在面向对象的概念中,所有的对象都是通过类来描绘的,但是反过来,并不是所有的类都是用来描绘对象的,如果 一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类

weixin_73869209的博客 727

【JAVA |抽象类和接口】JAVA中的抽象类和接口 纯干货!!!

接口提供了一种抽象的方法定义和类型规范,可以帮助我们实现代码的灵活性、可扩展性和可维护性,接口可以看作是一种合约或协议,规定了类应该实现哪些方法。

YKX0000的博客 1534

java抽象类和接口

在面向对象的概念中,所有的对象都是通过类来描绘的,但是反过来并不是所有的类都是用来描绘对象的,,这样的类就是抽象类。例如:一只小鸟和一只小狗,在Animal这个类中可以写出它们共同之处,但不能完整描绘出任意一个动物的具体方法比如鸟会飞但小狗不会,所以我们可以把animal定义为抽象类。

huohaiyu的博客 641

Java中接口与抽象类的区别,你知道吗?

接口与抽象类的区别

2402_82473645的博客 898

java定义两个动物抽象类 程序_Java 提高篇之抽象类与接口

接口和内部类为我们提供了一种将接口与实现分离的更加结构化的方法抽象类与接口是java语言中对抽象概念进行定义的两种机制,正是由于他们的存在才赋予java强大的面向对象的能力。他们两者之间对抽象概念的支持有很大的相似,甚至可以互换,但是也有区别。一、抽象类我们都知道在面向对象的领域一切都是对象,同时所有的对象都是通过类来描述的,但是并不是所有的类都是来描述对象的。如果一个类没有足够的信息来描述一个具...

weixin_39892460的博客 1380

Java抽象类与接口

Java抽象类与接口

admin3335的博客 655

Java提高——接口与抽象类

(不知这样理解是否有错!接口是抽象类的延伸,java了保证数据安全是不能多重继承的,也就是说继承只能存在一个父类,但是接口不同,一个类可以同时实现多个接口,不管这些接口之间有没有关系,所以接口弥补了抽象类不能多重继承的缺陷,但是推荐继承和接口共同使用,因为这样既可以保证数据安全性又可以实现多重继承。抽象类方式中,抽象类可以拥有任意范围的成员数据,同时也可以拥有自己的非抽象方法,但是接口方式中,它仅能够有静态、不能修改的成员数据(但是我们一般是不会在接口中使用成员数据),同时它所有的方法都必须是抽象的。

m0_64363449的博客 107

java抽象类与接口

一、抽象类 1、抽象类的格式 2、抽象类与普通类的区别 3、抽象方法与普通方法的区别 4、抽象类与抽象方法的使用 二、接口 1、接口的定义和使用 2、接口特性 3、面向接口编程 4、面向接口编程的优点 5、抽象类和接口的联系和区别 6、接口和类之间的关系: 7、接口与接口的关系: 三、接口补充 1、JDK7以前只能定义抽象方法 2、JDK8以后接口新增的方法 3、JDK9新增的方法...

qi341500的博客 775
上一篇: JVM_0.5_小故事
下一篇: Java - 提高-源码(10) - HashMap
Simba_cheng
博客等级 码龄11年 250粉丝 203原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值