首页 > 其他分享 >接口和抽象类的区别是什么?

接口和抽象类的区别是什么?

时间:2023-07-11 15:46:02浏览次数:26  
标签:区别 实现 子类 接口 抽象 抽象类 方法

一. 介绍

  1.  接口  Interface

    接口可以称之为一种规范,在Java中被用来定义一组方法,而不提供具体的实现细节,它规定了一个类应该要实现哪些方法;其他类可以通过实现接口来达到代码重用和多态性的目的,帮助我们构建可扩展、灵活和可复用的代码。

  接口使用步骤:    

    - 定义接口:使用关键字interface定义接口,并在其中编写方法的声明。
    - 实现接口:在类中使用implements关键字来实现接口,并提供接口中声明的方法的具体实现。一个类可以实现多个接口,使用逗号分隔。
    - 实现接口的方法:类必须实现接口中的所有方法,并提供具体的实现代码。

// 定义接口  关键字:interface
interface Printable {
    void print(); // 声明一个打印方法
}

// 实现接口  关键字 implements 
class MyClass implements Printable {
    public void print() {
        System.out.println("Hello, World!");
    }
}

 

  2. 抽象类

    抽象类常用于定义一组通用行为和属性,它提供了一种约束和规范子类的方式,类中可以有抽象和非抽象的方法,子类必须实现(重写)抽象类中的所有抽象方法;非抽象的方法,已经有具体的实现,子类可以继承并直接使用。

  抽象类的使用步骤:

    - 使用关键字 "abstract" 来声明一个抽象类。抽象类不能被实例化,只能作为父类来定义子类的共性。

    - 在抽象类中可以定义抽象方法和具体方法。抽象方法是没有实现体的方法,它只包含方法的声明但没有方法体。具体方法则有方法体和实现。

    - 使用关键字 "extends" 来继承抽象类。一个子类只能继承一个抽象类

    - 子类继承抽象类时,必须实现(覆盖)抽象类中的所有抽象方法,除非子类也是抽象类,子类就可以选择性地重写具体方法。

    - 如果子类没有实现抽象类中的所有抽象方法,那么子类也必须声明为抽象类。

    - 实例化子类对象,并调用相应的方法。

// 创建抽象类 Animal 
public abstract class Animal {

    String name;

// 无方法体的抽象方法,子类必须要实现
   public abstract void sound();

// 有方法体的抽象方法,子类无需在实现,可重写
   public void sleep() {
        System.out.println("The animal is sleeping.");
    }
}

// 子类 dog
public class Dog extends Animal {
    // 实现抽象方法
    @Override

    public void sound() {
        System.out.println("实现Animal中的抽象方法:sound");
    }

// 根据业务需求可重写,
    @Override
    public void sleep() {
        super.sleep();
    }
}

 

二. 区别

    1. 定义

      抽象类更适合作为其他类的基类,提供一些通用的属性和方法的实现,抽象类使用关键字:abstract;

      接口主要用于定义一组行为规范,接口使用关键字:interface ;

    2. 继承与实现

      一个类只能继承一个抽象类,使用关键字:extends继承;

      一个类可以实现多个接口,使用关键字:implements实现;

    3. 构造函数

      抽象类可以有构造函数;

      接口不能有构造函数;

    4. 属性

      抽象类可以有实例变量,且支持声明和使用;

      接口的成员变量是被public static final 默认修饰的,必须在声明时进行初始化,并且一旦初始化后就不能再修改其值;

    5. 方法实现

      抽象类中包含普通方法和抽象方法,被继承的类,需要重写所有抽象方法,而普通方法可以直接使用。

      接口中的方法都是抽象的,需要在实现类中写具体实现逻辑。

    6. 接口的多态性

      由于一个类可以实现多个接口,因此可以通过接口实现更灵活的多态性,而抽象类的多态性较为有限。

 

 

  总之,接口主要用于定义一组行为规范,而抽象类则更适合作为其他类的基类,提供一些通用的属性和方法的实现。根据具体的需求和设计目标,选择使用接口还是抽象类,并按照对应的语法规则进行定义与实现。

 

  完

标签:区别,实现,子类,接口,抽象,抽象类,方法
From: https://www.cnblogs.com/victor-sin/p/17542782.html

相关文章

  • 77.C++中的指针参数传递和引用参数传递有什么区别?底层原理你知道吗?
    77.C++中的指针参数传递和引用参数传递有什么区别?底层原理你知道吗?1.指针参数传递本质上是值传递,它所传递的是一个地址值。值传递过程中,被调函数的形式参数作为被调函数的局部变量处理,会在栈中开辟内存空间以存放由主调函数传递进来的实参值,从而形成了实参的一个副本(替身)。值传......
  • 纯虚函数和抽象类
    想要在基类中定义虚函数实现多态,但是有不希望这个基类可以实例化,可以将虚函数定义为纯虚函数。 格式如下:virtual返回值类型函数名()=0;例:virtualintfun()=0; 纯虚函数的特性:1.包含纯虚函数的类称为抽象类。之所以说它抽象,是因为它无法实例化,也就是无法创建对象......
  • 「Python」load和loads的区别
    在Python中,load和loads都是用于处理JSON数据的函数,但它们的使用场景和功能略有不同:json.load():用于从文件中读取JSON数据并将其解析为Python对象。它接受一个文件对象作为参数,并返回解析后的JSON数据。示例:importjson#从文件中读取JSON数据withopen('dat......
  • SpringBoot开启Gzip接口报文压缩
    背景当我们一个接口响应报文比较大的时候,超过几兆甚至几十兆的情况下,减少响应体的报文大小是能有效减少响应时间的。springboot配置server:compression:##开启服务端的报文压缩enabled:true##只压缩响应类型为application/json的报文mime-types:a......
  • 接口设计应该有谁来做?
    1问题最近遇到了个问题,前后端针对接口设计争议,那么应该由谁来设计接口呢?2分析如果是前端(消费者)设计,则数据库管理混乱。如果是后端(被消费者)设计,则很多时候不满足业务条件3办法3.1办法1:架构师设计前后端都熟悉的架构师完成前后端的设计,从数据库的定义到接口的定义都做好......
  • MPI以太网通讯处理器西门子 plc s7 200以太网接口
    在热处理行业,铝型材时效炉是一款至关重要的设备,它不仅要求设备稳定性高,温度均匀性也必须达到最佳状态。然而,传统的以太网通迅CP343处理器在电气控制系统中的应用成本却非常高。那么,有没有一种更加性价比的替代方案呢?  捷米特研发的ETH-S7300-JM01以太网通讯处理器就是这样一......
  • how与what的用法和区别
    感叹句指的是具有强烈的情感色彩、表达出较强的语气情感比如喜悦、惊讶、愤怒等的句子。在英语中,感叹句一般由“how”与“what”引导。"what"和"how"与所修饰的词置于句首,其它部分用陈述句语序。一、how与what的用法:1、由"what"引导的感叹句:"what"意为"多么"用作定语,修饰名词(被......
  • ==与 equals 的区别?
    一.介绍:Java中的"==" 是一个运算符,是用于比较两个对象地址值或基本数据类型之间的值是否相等。它的来源可以追溯到C语言,以及受C语言影响的许多其他编程语言。Java中的equals()是一个方法,可重写该方法用于比较两个对象属性内容是否相等的方法。该方法继承自Obje......
  • strcpy、strncpy与memcpy的区别你了解吗?
    一、定义1.memcpy函数void*memcpy(void*destin,void*source,unsignedn);作用:函数memcpy从source指向的对象中复制n个字符到destin指向的对象中返回值:函数memcpy返回destin的指针。2.strcpy函数charstrcpy(chardest,constchar*src);作用:函数strcpy把src指向的......
  • 细节决定成败:探究Mybatis中javaType和ofType的区别
    一.背景描述今天给学生讲解了Mybatis框架,学习了基础的ORM框架操作及多对一的查询。在练习的时候,小张同学突然举手求助,说在做预习作业使用一对多查询时,遇到了ReflectionException 异常 。二.情景再现1.实体类为了给大家讲清楚这个异常的产生原因,壹哥先列出今天案例中涉及到的两......