抽象类和接口的区别

抽象类和接口的区别:
抽象类(Abstract Class):
  1. 抽象类是一种不能被实例化的类,它只能被用作其他类的父类(基类)。
  2. 抽象类可以包含抽象方法和非抽象方法。抽象方法是没有具体实现的方法,需要在子类中被具体实现。非抽象方法则是有具体实现的方法,子类可以直接继承和使用。
  3. 抽象类可以有构造方法,用于初始化实例对象,但抽象类本身不能被实例化。
  4. 抽象类可以包含成员变量,也可以包含普通的方法实现。
  5. 一个类可以继承一个抽象类,因为Java是单继承语言,一个子类只能有一个直接的父类。

抽象类的主要目的是为了提供一种抽象的模板或基础类,它能够定义一些通用的属性和行为,供子类进行继承和实现。抽象类本身不能被实例化,只能作为父类被继承。

接口(Interface):
  1. 接口是一种纯粹的抽象类型,它用于定义一组方法的规范,但接口本身不提供方法的实现。
  2. 接口只能包含抽象方法和常量的定义。抽象方法是没有具体实现的方法,需要在实现接口的类中被具体实现。常量则是接口中定义的不可变的值。
  3. 接口中的方法默认是公有的抽象方法,常量默认是公有的静态常量,不需要显式地声明为public。
  4. 一个类可以实现多个接口,这是Java支持多继承特性的一种体现。通过实现接口,一个类可以获得多个不同接口的行为。
  5. 接口不能包含成员变量,但可以定义常量。

接口的主要作用是定义一组行为规范,通过实现接口,类可以获得特定行为的能力,从而实现更高的抽象和多态。

总结一下区别:
  • 抽象类是一种部分实现的类,它可以包含具体的方法和抽象方法,主要用于定义共性的行为和属性,无法进行多继承。
  • 接口是一种完全抽象的类型,它只能包含抽象方法和常量的声明,主要用于描述对象具有的行为,可以被类多重实现。

  在设计和使用类时,需要根据具体情况来选择使用抽象类还是接口。抽象类适用于在多个子类之间有较多重复代码和共同特征的情况下使用,而接口适用于在不相关的类之间定义通用行为要求的情况下使用

案例解释:
一、抽象类(Abstract Class):

    抽象类是一种不能被实例化的类,只能被其他非抽象类继承。它主要用于定义一些通用的模板和规范,具体的实现由其子类完成。下面是抽象类的一些特点:

  1. 抽象类通过关键字abstract来定义,在类的声明前加上abstract即可。
  2. 抽象类可以包含抽象方法和非抽象方法。

下面是一个简单的示例,通过一个抽象类Animal来定义动物的一些特征和行为:

package LxDemo;/*** @author YJH* @date 2024/1/3 09:29*//*
*
* 1.抽象类必须用 abstract 声明
* (可以单独把Animal,单独写成一个类,为了省事,我写在一个里面)
**/
abstract class Animal {protected String name;protected int age;public Animal(String name, int age) {this.name = name;this.age = age;}abstract void makeSound(); // 抽象方法public void printInfo() {   // 非抽象方法System.out.println("姓名: " + name);System.out.println("年龄: " + age);}
}/*2.抽象类需要继承来实现,继承的关键字是extends。*/
class Dog extends Animal {public Dog(String name, int age) {super(name, age);}//抽象类必须实现抽象方法,方法名自己定义void makeSound() {    // 实现抽象方法System.out.println("汪汪汪!");}
}class Cat extends Animal {public Cat(String name, int age) {super(name, age);}void makeSound() {    // 实现抽象方法System.out.println("喵喵喵!");}
}public class abstractDemo {public static void main(String[] args) {/** 1.首先,我们定义了一个变量dog,其类型是Animal,这意味着它是一个指向Animal类对象的引用。* 2.然后,通过调用Dog类的构造函数Dog("旺财", 3)创建一个Dog类的实例对象。* 3.由于Dog类是Animal类的子类,所以可以将Dog对象赋值给Animal类型的变量dog。* 4.这样,我们就可以通过dog引用访问Animal类中定义的方法和属性。* *   需要注意的是,虽然dog引用的是一个Dog类实例对象,但编译器只知道它是* 一个Animal类型的引用,因此只能调用Animal类中定义的方法和属性。如果* Dog类重写了Animal类中的某些方法,那么实际执行时将调用Dog类中的方法。**    总结:通过将子类对象赋值给父类类型的变量,我们可以实现多态性,并且* 可以在代码中更灵活地处理对象。这使得我们能够统一对待不同的子类对象,并*使用相同的方法来处理它们,从而提高代码的可扩展性和可维护性。*/Animal dog = new Dog("旺财", 3);dog.makeSound();    // 输出:"汪汪汪!"dog.printInfo();    // 输出:"Name: 旺财","Age: 3"//实例化cat对象Animal cat = new Cat("小花", 2);cat.makeSound();    // 输出:"喵喵喵!"cat.printInfo();    // 输出:"Name: 小花","Age: 2"}
}

运行结果: 

二、接口(Interface):

   接口是一种纯粹的抽象概念,它定义了一些方法的签名(即方法名称、参数列表和返回类型),而不包含具体的实现。接口用于描述对象具有的行为能力,而不关心具体类的实现细节。下面是接口的一些特点:

  1. 接口通过关键字interface来定义,类似于类的声明。
  2. 接口中只能包含常量和抽象方法。

以下是一个简单的示例,通过接口Shape来定义形状对象的一些行为:

 

package LxDemo;/*** @author YJH* @date 2024/1/3 09:49*/
//利用interface定义一个接口
interface Shape {//计算数字和int addition();//计算数字差int subtraction();
}//利用implements,实现接口
class Circle implements Shape {private int radius;int a = 10;public Circle(int radius) {this.radius = radius;}public int addition() {    // 实现接口中的方法return a + radius;}public int subtraction() {    // 实现接口中的方法return a - radius;}
}//利用implements,实现接口
class Rectangle implements Shape {private int snum;private int munm;public Rectangle(int snum, int munm) {this.snum = snum;this.munm = munm;}public int addition() {    // 实现接口中的方法return snum + munm;}public int subtraction() {    // 实现接口中的方法return (snum - munm);}
}public class inteFaceDemo {public static void main(String[] args) {Shape circle = new Circle(5);System.out.println("10 + 5 = " + circle.addition());System.out.println("10 - 5 = " + circle.subtraction());Shape rectangle = new Rectangle(3, 4);System.out.println("3 + 4 = " + rectangle.addition());System.out.println("3 - 4 =" + rectangle.subtraction());
}
}

 运行结果:

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

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

相关文章

2020年认证杯SPSSPRO杯数学建模B题(第二阶段)分布式无线广播全过程文档及程序

2020年认证杯SPSSPRO杯数学建模 B题 分布式无线广播 原题再现: 以广播的方式来进行无线网通信,必须解决发送互相冲突的问题。无线网的许多基础通信协议都使用了令牌的方法来解决这个问题,在同一个时间段内,只有唯一一个拿到令牌…

医院信息系统集成平台—数据交换层

医院集成平台核心是数据交换总线,这解决当前大部分医院最关注的电子病历与移动医疗等业务系统接口交互共享及消息数据状态同步(消息一体化机制)等问题。集成平台主要包括业务数据集并提供相应的标准处理接口API(含数据采集与数据发布查询更新),同时提供相应的适配器服务来…

20240102使用python3将视频切片改名之后合并

20240102使用python3将视频切片改名之后合并 2024/1/2 22:12 缘起:将迅雷下载的视频切片排序之后再通过ffmpeg合并!https://pri-cdn-tx.xiaoeknow.com/app1cE7gLFM1187/confusion_index/1703599111EAPoRE.m3u8?signf17e1a2cc0ddd77801f3c5110116369e&am…

C++ //习题14.2 将例14.3程序改为下面的程序,请分析执行过程,写出运行结果。并指出由于异常处理而调用了哪些析构函数。

C程序设计 (第三版) 谭浩强 习题14.2 习题14.2 将例14.3程序改为下面的程序,请分析执行过程,写出运行结果。并指出由于异常处理而调用了哪些析构函数。 IDE工具:VS2010 Note: 使用不同的IDE工具可能有部分差异。 代…

Qt:自定义一个好看的等待提示Ui控件

一、2024 永不卡顿 爱的魔力它转圈圈~ 等待样式控件是我们在做UI时出场率还挺高的控件之一,通常情况下有如下的几种实现方式: 1> 获取一张gif的资源图,然后使用QMovie 在一个QLabel 控件上加载显示gif的waiting等待动态。 2> 自定义绘图…

Linux 进程(五) 调度与切换

概念准备 当一个进程放在cpu上运行时,是必须要把进程的代码跑完才会进行下一个进程吗?答案肯定是 不对。现在的操作系统都是基于时间片轮转执行的。 时间片(timeslice)又称为“量子(quantum)”或“处理器片…

计算机网络【Cookie和session机制】

会话(Session)跟踪是Web程序中常用的技术,用来跟踪用户的整个会话。常用的会话跟踪技术是Cookie与Session。Cookie通过在客户端记录信息确定用户身份,Session通过在服务器端记录信息确定用户身份。 本章将系统地讲述Cookie与Sess…

【Pytorch】学习记录分享11——PyTorch GAN对抗生成网络

PyTorch GAN对抗生成网络 0. 工程实现1. GAN对抗生成网络结构2. GAN 构造损失函数(LOSS)3. GAN对抗生成网络LOSS损失函数说明 0. 工程实现 1. GAN对抗生成网络结构 2. GAN 构造损失函数(LOSS) LOSS公式与含义: LOSS…

javascript 常见工具函数(四)

31.RGB值和十六进制值之间的转换: (1)十六进制的颜色转为 RGB格式: /*16进制颜色转为RGB格式*/String.prototype.colorRgb function () {var sColor this.toLowerCase();if (sColor && reg.test(sColor)) {if (sColor.l…

C++初阶——类与对象

目录 C宏函数 在使用宏函数时,有几个常见的错误需要注意: 宏函数在某些情况下有以下优势: 1.C宏函数 在 C 中,宏函数(Macro Function)是使用预处理器定义的宏(Macro)&#xff0…

初识Linux下进程

🌎初识进程 初识进程 简单认识一下进程 如何管理进程 进程属性信息 内核运行队列 查看进程 通过系统调用获取进程标识符       父子进程       查看运行中的进程 总结 前言: 我们在电脑上点开的一个个应用,其实就是一个个进程&am…

初识Java并发,一问读懂Java并发知识文集(4)

🏆作者简介,普修罗双战士,一直追求不断学习和成长,在技术的道路上持续探索和实践。 🏆多年互联网行业从业经验,历任核心研发工程师,项目技术负责人。 🎉欢迎 👍点赞✍评论…

智能标志桩:防盗防外物入侵_图像监测_态势感知_深圳鼎信

智能标志桩是一种新型的智能化标志设备,主要用于标识地下管道的位置、类型等,起警示作用。这与传统的标志桩大不相同,物联网的高速发展赋予了智能标志桩科技的力量,使它可以连接互联网,还具备图像监控的功能&#xff0…

2024年P气瓶充装证考试题库及P气瓶充装试题解析

题库来源:安全生产模拟考试一点通公众号小程序 2024年P气瓶充装证考试题库及P气瓶充装试题解析是安全生产模拟考试一点通结合(安监局)特种作业人员操作证考试大纲和(质检局)特种设备作业人员上岗证考试大纲随机出的P气…

C++Qt6 多种排序算法的比较 数据结构课程设计 | JorbanS

一、 问题描述 在计算机科学与数学中,一个排序算法(英语:Sorting algorithm)是一种能将一串资料依照特定排序方式排列的算法。最常用到的排序方式是数值顺序以及字典顺序。有效的排序算法在一些算法(例如搜索算法与合…

Linux系统操作常用指令

打开终端: ctrlshiftt:切换标签 ctrlshiftn:新增窗口 Linux命令大全(超详细版)_第二范式的博客-CSDN博客 VMware运行时以管理员身份运行,可以避免许多问题。 输入法切换 ctrl 空格 放大终端:ctrlshift"" 缩小终端:ctrl“…

【深度学习-基础学习】Transformer 笔记

本篇文章学习总结 李宏毅 2021 Spring 课程中关于 Transformer 相关的内容。课程链接以及PPT:李宏毅Spring2021ML这篇Blog需要Self-Attention为前置知识。 Transfomer 简介 Transfomer 架构主要是用来解决 Seq2Seq 问题的,也就是 Sequence to Sequence…

web前端——clear可以清除浮动产生的影响

clear可以解决高度塌陷的问题&#xff0c;产生的副作用要小 未使用clear之前 <!DOCTYPE html> <head><meta charset"UTF-8"><title>高度塌陷相关学习</title><style>div{font-size:50px;}.box1{width:200px;height:200px;backg…

【已解决】打印PDF文件,如何跳过不需要的页面?

打印PDF文件的时候&#xff0c;有时候我们只需要打印其中的几页&#xff0c;并不需要全部打印&#xff0c;那如何在打印时跳过那些不需要的页面呢&#xff1f;不清楚的小伙伴一起来看看吧&#xff01; 如果你是通过网页打开PDF文件&#xff0c;那么可以在页面中找到并点击“打…

[每周一更]-(第53期):Python3和Django环境安装并搭建Django

Python和Django 的安装 Python和Django 兼容情况 django 1.11.x python 2.7 3.4 3.5 3.6 LTS python 目前在用版本 Python 3.6.5 2018-03-28 更新Python 2.7.15 2018-05-01 更新Python 2.7.5 2013-05-12 更新 python和python3安装pip 同时安装上 python2.7.18、python3.11…