关于Java抽象类和接口的总结和一点个人的看法

꒰˃͈꒵˂͈꒱ write in front ꒰˃͈꒵˂͈꒱
ʕ̯•͡˔•̯᷅ʔ大家好,我是xiaoxie.希望你看完之后,有不足之处请多多谅解,让我们一起共同进步૮₍❀ᴗ͈ . ᴗ͈ ა
本文由xiaoxieʕ̯•͡˔•̯᷅ʔ 原创 CSDN 如需转载还请通知˶⍤⃝˶
个人主页:xiaoxieʕ̯•͡˔•̯᷅ʔ—CSDN博客
系列专栏:xiaoxie的Java系列专栏——CSDN博客●'ᴗ'σσணღ*
我的目标:"团团等我💪( ◡̀_◡́ ҂)" 

感谢您的阅读!

( ⸝⸝⸝›ᴥ‹⸝⸝⸝ )欢迎各位→点赞👍 + 收藏⭐️ + 留言📝​+关注(互三必回)!

一.抽象类

1.抽象类的定义

Java中的抽象类是一种特殊的类,它不能被实例化,只能被继承。抽象类用于定义一些通用的属性和方法,但是这些方法并没有具体的实现,需要子类去实现。抽象类的定义使用关键字abstract来修饰,可以包含抽象方法和非抽象方法。

2.抽象类的语法

public abstract class Animal {
    //和普通的类一样可以创建成员变量,静态成员变量
    public String name;
    private int age;
    protected String sex;
    public static int a;
    //和普通的类一样可以创建成员方法,静态成员方法
    public void func1() {
        
    }
    public static void func2() {
        
    } 
    //和普通类不一样的是抽象类还可以创建抽象方法
    //抽象方法要在方法的前面加上关键字abstract 并且没有具体的实现
    public abstract void func3();

}
  • 使用关键字abstract来修饰类,表示这是一个抽象类。
  • 抽象类可以包含成员变量、构造方法、抽象方法和非抽象方法。
  • 抽象方法的声明以及没有方法体。
  • 非抽象方法有具体的实现,可以直接调用。
  • 抽象类不能被实例化,只能被继承。

3.抽象类的注意事项

1.抽象类不能被实例化:抽象类不能被直接实例化,因为它包含未实现的抽象方法。只能被用作其他类的父类,子类必须实现抽象方法才能被实例化。

2.子类必须实现抽象方法:如果一个类继承了一个抽象类,它必须实现抽象类中所有的抽象方法,除非子类也声明自己为抽象类。

3.抽象类可以包含非抽象方法:抽象类中可以包含非抽象方法,这些方法有具体的实现。子类可以直接继承这些非抽象方法,也可以选择性地重写它们。

4.抽象类可以包含成员变量和构造方法:与普通类一样,抽象类可以包含成员变量和构造方法。子类可以通过super关键字调用父类的构造方法。

5.抽象类可以被继承:一个抽象类可以被另一个抽象类继承,子类可以继续定义更多的抽象方法,或者实现所有的抽象方法。

4.对抽象类的看法

抽象类是一种不能被实例化的类,它主要用于定义一些共性的属性和方法,以供其子类继承和实现。抽象类本身并不具备完整的实现,而是通过其子类来完善其方法和属性。因此,抽象类可以被看作是一种模板或者规范,用来约束其子类的行为和结构。

抽象类的存在可以帮助程序员更好地进行代码的组织和设计,通过抽象类可以定义出一些通用的行为和属性,减少了代码的重复性,提高了代码的可维护性和扩展性。同时,抽象类也能够在一定程度上约束了子类的行为,使得程序更加健壮和可靠。

总的来说,抽象类是面向对象编程中非常重要的概念,它能够帮助程序员更好地进行代码的组织和设计,提高代码的复用性和可维护性。因此,对于抽象类的使用,程序员需要深入理解其特性和用法,合理地应用到实际的程序设计中。

二.接口

1.接口的定义

接口是指软件系统中不同组件之间互相传递信息的规范和协定。在面向对象编程中,接口用来定义一个类的行为,是类的一种规范化或规范模式。接口中定义了一些方法,但是并不实现,而是由实现该接口的类去实现。

在具体应用中,接口可以描述两个不同的组件之间的交互方式,包括数据格式、协议、参数、返回值等方面的规范。接口可以帮助不同的系统或组件进行互操作,提高软件的可维护性、可扩展性和灵活性。同时,接口的定义还可以帮助开发人员进行模块化的设计和开发,提高代码的复用和可读性。

2.接口的语法

public interface IFly {
    //接口也可以创建成员变量
    //不过成员变量 默认的形式为 public static final
    //并且需要初始化 因为接口不能实例化对像
     String name = " ";
     //接口可以创建成员方法
    //成员方法被 public abstract 修饰 也可以不写,并且没有方法实现
    //实现这个接口的类需要重写接口的这个方法
    public void work();
    //要写具体的方法实现 需要被 public static 所修饰
    public static void work1() {
        
    }
}

其中,InterfaceName是所定义的接口的名称,// 接口成员指的是在接口中定义的方法和属性。在接口中定义的方法和属性不包含函数体和实现细节,只是提供了一个对实现类的约束,即定义了实现类必须实现哪些方法和属性。

3.接口的注意事项

1. 确保接口的命名具有描述性,能够清晰地表达其功能和用途。
2. 接口的方法和属性应该按照功能进行分组和命名,以便于理解和使用。
3. 接口的设计应该尽量简洁和易于理解,避免过度复杂或冗余的设计。
4. 在设计接口时,需要考虑到未来可能的扩展和变化,以便接口能够灵活地适应需求的变化。
5. 接口的文档应该清晰地描述每个方法和属性的作用和用法,以便其他开发人员能够正确地使用接口。
6. 在实现接口时,需要确保按照接口定义的要求进行实现,以确保接口的一致性和可靠性。
7. 接口的版本管理也是一个重要的考虑因素,需要确保接口的变化不会对已有的实现造成影响。
8. 在使用接口时,需要遵循接口的规范和约定,以确保接口的正确使用和调用。

4.父类和接口的区别

1.在Java中子类只能继承一个父类,子类却可以实现多个接口

2.抽象类的成员属性和方法和普通类一样 可以创建成员变量和成员方法,而接口的成员属性是被 public stasic final 和 public abstract 所修饰的

5.对接口的看法

接口是一种非常重要的编程概念,它可以帮助开发人员实现代码的模块化和复用,提高代码的可维护性和可扩展性。

接口提供了一种规范化的方式来定义类之间的交互和通信方式,使得不同的类可以通过实现同一个接口来实现相同的功能。这种方式可以大大减少代码的重复和冗余,同时也可以提高代码的可读性和可理解性。

另外,接口还可以帮助开发人员实现代码的解耦和模块化,使得不同的模块之间可以独立开发和测试,从而提高代码的质量和可靠性。同时,接口的使用也可以促进团队合作和代码复用,使得开发效率得到提高。

总之,作为一种重要的编程概念,接口在软件开发中具有非常重要的作用,它可以帮助开发人员实现代码的复用和模块化,提高代码的可维护性和可扩展性,促进团队合作和开发效率的提高。

三.接口和抽象类的结合运用

接口和抽象类都是面向对象编程中的重要概念,它们可以用于实现多态和封装。在某些情况下,将接口和抽象类结合起来使用可以达到更好的效果。

接口和抽象类的区别在于,接口只能定义方法和常量,而抽象类可以定义具体方法和成员变量。因此,可以使用抽象类来实现接口中的某些方法,然后在子类中重写剩余方法。

例如,假设我们有一个图形接口 Shape,其中定义了一个计算面积的方法 getArea()。我们可以将该接口改为抽象类,并提供一个具体方法 getPerimeter() 来计算周长。这样,子类就可以继承抽象类并只需要实现计算面积的方法。

示例代码如下:

public abstract class Shape {
  public double getPerimeter() {
    return 0;
  }
  
  public abstract double getArea();
}

public class Circle extends Shape {
  private double radius;
  
  public Circle(double radius) {
    this.radius = radius;
  }
  
  @Override
  public double getArea() {
    return Math.PI * radius * radius;
  }
  
  @Override
  public double getPerimeter() {
    return 2 * Math.PI * radius;
  }
}

public class Rectangle extends Shape {
  private double length;
  private double width;
  
  public Rectangle(double length, double width) {
    this.length = length;
    this.width = width;
  }
  
  @Override
  public double getArea() {
    return length * width;
  }
  
  @Override
  public double getPerimeter() {
    return 2 * (length + width);
  }
}

在上面的示例中,我们将 Shape 接口改为抽象类,并添加了一个具体方法 getPerimeter()。子类 Circle 和 Rectangle 继承自 Shape,并实现了 getArea() 方法和重写了 getPerimeter() 方法。

通过这种方式,我们可以在抽象类中实现一些通用的方法,同时还能保留接口的灵活性。这种结合运用可以使代码更加简洁和易于扩展。

 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

第六届浙江省大学生网络与信息安全竞赛 2023年 初赛/决赛 WEB方向 Writeup

-------------------【初赛】------------------- easy php 简单反序列化 __debuginfo()魔术方法打印所需调试信息&#xff0c;反序列化时候执行&#xff01; 链子如下&#xff1a; BBB::__debuginfo()->CCC::__toString()->AAA::__call()EXP&#xff1a; <?php…

竞赛 题目:基于卷积神经网络的手写字符识别 - 深度学习

文章目录 0 前言1 简介2 LeNet-5 模型的介绍2.1 结构解析2.2 C1层2.3 S2层S2层和C3层连接 2.4 F6与C5层 3 写数字识别算法模型的构建3.1 输入层设计3.2 激活函数的选取3.3 卷积层设计3.4 降采样层3.5 输出层设计 4 网络模型的总体结构5 部分实现代码6 在线手写识别7 最后 0 前言…

金蝶云星空表单插件获取控件值

文章目录 金蝶云星空表单插件获取控件值获取主键获取文本获取日期获取数值获取基础资料 金蝶云星空表单插件获取控件值 获取主键 正确&#xff1a; this.View.Model.GetPKValue();错误&#xff1a; 获取文本 this.View.Model.GetValue("FBILLNO")获取日期 thi…

等保到底在“保”什么?

在信息时代&#xff0c;等保评级成为衡量企业信息安全水平的重要标准。那么&#xff0c;什么是等保评级呢&#xff1f;等保合规到底保的是什么呢&#xff1f;一起来看看吧。 编辑搜图 请点击输入图片描述&#xff08;最多18字&#xff09; 等保评级&#xff0c;会从七个维度进…

2023.11.16 hivesql之条件函数,case when then

目录 一.Conditional Functions条件函数 二.空值相关函数 三&#xff1a;使用注意事项 3.1 then后面不能接子查询 3.2 then后面只能是结果值 3.3 then后面能不能接两列 四.用于建表新增字段使用场景 一.Conditional Functions条件函数 -- 演示条件函数 -- if(条件判断,t…

SQL编写规范【干货】

编写本文档的目的是保证在开发过程中产出高效、格式统一、易阅读、易维护的SQL代码。 1 编写目 2 SQL书写规范 3 SQL编写原则 获取所有软件开发资料&#xff1a;点我获取

清晨早安问候祝福语精选,相互牵挂,祝福无价!

1、有一种祝福&#xff0c;时刻都在心里。无论相隔多远&#xff0c;都能温暖彼此的心灵。珍惜美丽相遇&#xff0c;珍藏这份情意。忙碌不是忘记&#xff0c;牵挂一直都在心里。送上一份心的祝福&#xff0c;书写一份心的牵挂&#xff0c;坦诚相待&#xff0c;温暖相伴&#xff…

2023 年是无代码的一年,还要程序员吗?

从 Code 到 No Code&#xff0c;IT 界对简化代码开发的需求由来已久&#xff1a;过去数十年的发展历程中&#xff0c;在企业应用程序开发上&#xff0c;我们研发出工作流、智能业务流程管理系统、低代码/无代码、还有高生产力应用程序平台等应用开发形式。 有一句话在 IT 界流…

openGauss学习笔记-124 openGauss 数据库管理-设置账本数据库-查看账本历史操作记录

文章目录 openGauss学习笔记-124 openGauss 数据库管理-设置账本数据库-查看账本历史操作记录124.1 前提条件124.2 背景信息124.3 操作步骤 openGauss学习笔记-124 openGauss 数据库管理-设置账本数据库-查看账本历史操作记录 124.1 前提条件 系统中需要有审计管理员或者具有…

Java中生成指定字体的印章

文章目录 1.引入字体2.Windows环境下3. Linux环境下 生成印章测试类绘制方章测试类 1.引入字体 2.Windows环境下 如果在Windows上安装JAVA环境时&#xff0c;没有安装单独的jre1.8.0_141的话。那么字体就只放到\jdk1.8.0_141\jre\lib\fonts目前下。 3. Linux环境下 cat /etc…

《洛谷深入浅出进阶篇》 P1496火烧赤壁——初识离散化

上链接&#xff1a; P1496 火烧赤壁 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)https://www.luogu.com.cn/problem/P1496上题干&#xff1a; 有一组序列&#xff0c;[-2^31,2^31] &#xff0c; 现在给你n次操作&#xff0c;每一次操作给出两个整数l&#xff0c;r&#xff…

AM335x USB Boot详细说明

首先&#xff0c;要rev2.1的芯片才支持&#xff0c;以前的cpu有bug&#xff0c;无法使用usb boot 上位机需要uniflash&#xff0c; 以太网上截取的报文&#xff0c;可以进入第一阶段 AM335x自动从c:\am335x_flashtool\images目录下下载u-boot-spl-restore.bin http://process…

RFID技术在危险废物管理中的应用解决方案

一、背景介绍 随着我国经济的快速发展&#xff0c;轻纺、化工、制药、电子等行业的危险废物排放量逐年增加。然而&#xff0c;由于危险废弃物处理不当&#xff0c;可能导致大气、水体和土壤污染&#xff0c;对环境和人体健康造成严重威胁&#xff0c;制约了经济和健康的可持续…

Linux-查询目录下包含的目录数或文件数

1. 前置 1&#xff09;ls Linux最常用的命令之一&#xff0c;列出该目录下的包含内容。 -l&#xff1a;use a long listing format-以列表的形式展现 -R&#xff1a;list subdirectories recursively-递归列出子目录 2&#xff09;| 管道符 将上一条命令的输出&#xff…

调研了一下java常用的几个图片处理工具对Tiff文件的支持

ImageMagick 官网 https://imagemagick.org/&#xff0c; 支持多种格式。命令行工具很适合调试。功能很强大. 还有一款工具GraphicsMagick 是从ImageMagick的基础上研发出来的。 OpenCV 官网 https://opencv.org/ &#xff0c; github地址https://github.com/opencv/opencv&…

Springboot项目中打印SQL语句日志

在项目中我想查看自己的SQL语句是什么&#xff0c;就是如下图的内容&#xff1a; 方法一&#xff1a;&#xff08;我常用的&#xff09; 可以在项目中的.yml配置文件中添加如下内容&#xff1a; logging:level:com.uyun.bankbranchalert.mapper: debug其中com.uyun.bankbran…

如何挑选猫主食罐头?宠物店自用的5款猫主食罐头推荐!

临近双十二大促&#xff0c;是时候给家里的猫主子屯猫主食罐头了。许多铲屎官看大促的各种品牌宣传&#xff0c;看到眼花缭乱&#xff0c;不知道选哪些猫主食罐头好&#xff0c;胡乱选又怕踩坑。 猫罐头侠闪亮登场&#xff01;如何挑选猫主食罐头&#xff1f;作为经营宠物店7年…

开启核磁数据处理新篇章-MestReNova(MNOVA14)助您轻松解读科学界密码

在科学研究领域&#xff0c;核磁共振&#xff08;NMR&#xff09;技术被广泛应用于分析和解读化学物质的结构和性质。而MestReNova&#xff08;MNOVA14&#xff09;作为一款专业的核磁数据处理软件&#xff0c;凭借其强大的功能和易用性&#xff0c;已成为众多科研人员的首选工…