【Java基础专题】6. 抽象和接口的区别?

本问题对应的项目链接:高频题回答模版训练

回答指导:其实这种很简单,但是有时候,要想清楚没那么容易,大家可以好好想一想,想出自己的理解

共以下 14 个回答

  • 八点上线 永久会员 2024年12月12日 下午7:37

    抽象是用abstract关键字修饰的,接口是用interface修饰的,抽象修饰的类子类只能继承一个,接口能实现多个,抽象是为了代码的复用,接口是为了实现解耦

    0 赞同 0 条回复
  • Silence 永久会员 2023年10月22日 下午10:00

    首先抽象内它是用abstract这个关键字来进行修饰的。而接口的声明它是需要用interface这个关键词来进行声明。
    如果要实现一个接口的话,是用的implement这个关键词。而要继承一个抽象类的话,需要使用extent这个关键字。
    从继承上来说,一个类它只能继承一个抽象类,但是却可以实现多个接口。
    抽象类它可以拥有自己的构造器,但是接口它不能拥有自己的构造器。
    还有一点比较细节,就是抽象类中它可以有任意的方法,但是接口中只能有抽象方法。
    接口可以理解为是对JAVA不支持多继承的一种补充。

    从更深层次的层面来说,抽象类它是对类的,抽象表达的是这个类是什么,而接口它是对行为的一种抽象,强调的是他能够做什么。
    通常我们在使用的时候,如果说只是想实现某一种行为的话,就选择使用接口。如果说我们是对一些此类的通用行为进行提取的话就用抽象类。

    0 赞同 0 条回复
  • LilyBoy 永久会员 2023年9月3日 上午11:04

    相同:
    1、都是抽象的声明
    不同:
    抽象类包含普通方法和申明,接口只包含方法的声明;
    抽象级别:抽象类>接口
    抽象类只有继承于一个类,而一个类可以实现多个接口;
    抽象类是对属性、方法的抽象,而接口是对行为的约束;

    0 赞同 0 条回复
  • 泡芙 永久会员 2023年6月27日 下午5:27

    抽象和接口的区别分为基本语法区别和设计思想区别

    举个简单的例子,飞机和鸟是不同类的事物,但是它们都有一个共性,就是都会飞。那么在设计的时候,可以将飞机设计为一个类Airplane,将鸟设计为一个类Bird,但是不能将 飞行 这个特性也设计为类,因此它只是一个行为特性,并不是对一类事物的抽象描述。此时可以将 飞行 设计为一个接口Fly,包含方法fly( ),然后Airplane和Bird分别根据自己的需要实现Fly这个接口。然后至于有不同种类的飞机,比如战斗机、民用飞机等直接继承Airplane即可,对于鸟也是类似的,不同种类的鸟直接继承Bird类即可。从这里可以看出,继承是一个 “是不是“的关系,而接口实现则是 “有没有“的关系。如果一个类继承了某个抽象类,则子类必定是抽象类的种类,而接口实现则是有没有、具备不具备的关系,比如鸟是否能飞(或者是否具备飞行这个特点),能飞行则可以实现这个接口,不能飞行就不实现这个接口。

    通过这个例子可以看出,抽象类和接口的设计目的和使用方式是不同的。抽象类用于表示一类对象的通用特征和行为,并可以包含具体方法的实现,而接口用于表示一组相关的操作或功能,其中所有方法都是抽象的,需要由实现类提供具体实现。

    0 赞同 0 条回复
  • 中国用户 永久会员 2023年6月26日 下午5:41

    相同:都不能被实例化,都可以包含抽象方法
    不同:抽象类可以实现方法,接口类只能方法声明;抽象类只能继承一个抽象类,接口可以实现多个接口;抽象类可以定义构造方法和静态方法,接口类不行。

    0 赞同 0 条回复
  • mpweixin用户 永久会员 2023年6月20日 下午2:28

    相同点:都不可以被实例化,都可以包含抽象方法;
    不同点:1.接口主要作用是约束类的行为,实现了这个接口的类就具有了这些行为;抽象类主要作用是复用代码,强调所属关系;
    2.可以实现多个接口,但只能继承一个类
    3.接口中如果有成员变量必须被public static final修饰,必须要赋初值,且不允许被修改;而抽象类里面的成员变量没有这种限制,是可以被子类修改的;
    4.接口是使用interface关键字定义的,抽象类是通过abstract class来定义的

    0 赞同 0 条回复
  • 。 永久会员 2023年6月17日 下午8:48

    抽象类使用abstract修饰,有抽象方法和普通方法,需要extend来继承,而且只能单继承。
    接口使用interface修饰,只有抽象方法,需要implement来实现,可以同时实现多个接口类。

    0 赞同 0 条回复
  • upward ᯤ⁶⁰ᴳ 永久会员 2023年6月3日 上午8:41

    抽象类是可以定义方法体的,接口是不可一定义方法体的(default修饰除外),接口的成员变量都是static final的。抽象类是的使用是为了代码复用,将重复的逻辑和成员变量写成抽象类,比如Stringbuffer和Stringbuilder都继承了AbstractStringBuilder,其中的value属性也是从AbstractStringBuilder来的。包括一些非抽象方法。接口相当于指定的一套规范,,有多个实现类时方便统一管理。比如java的collection接口,规定了单列集合必须实现的一些方法,比如add,size,remove等

    0 赞同 0 条回复
  • Gary 永久会员 2023年5月31日 下午6:13

    抽象是用abstract修饰的类或方法,抽象类里面,可以包含抽象方法和普通方法,抽象方法只能声明,不能有方法体,必须在子类中实现,而普通方法可以直接在子类中使用,也可以选择在子类重写。
    接口是用interface定义的,java8之后,包含抽象方法、默认方法和常量。接口的成员变量,修饰符默认为static final,意思是接口的成员变量只能是静态的常量。接口不能被实例化,只能被其它类实现,一个类可以实现多个接口,但是一个类只能继承一个抽象类。
    从JVM的角度看,继承抽象类或者实现接口的过程,如果调用抽象方法或者对普通方法进行了重写,则是动态绑定的,在运行时根据对象的实际类型,来决定调用哪个方法;如果直接调用接口或抽象类中的普通方法,则是静态绑定,在编译阶段就决定了调用哪个方法,因为没有重写,就只有这一个方法可以调用,也就不用决定选用哪个了。

    0 赞同 0 条回复
  • 小鱼 永久会员 2023年5月30日 下午8:45

    抽象是被 abstract 修饰的类或者方法,接口是被interface 修饰的类。在使用上,子类extends抽象类,implements接口,抽象类是单继承的,但是接口不是,可以被多个实现,子类可以重写抽象类的方法,满足自己的需求,接口也一样,但是接口可以规范行为,比如在公司几个人要写不同的类,可以让他实现我们定义的接口,这样子方便统一管理

    0 赞同 0 条回复
  • 小肸 永久会员 2023年5月27日 下午7:41

    抽象主要是为了代码复用。比如一些类拥有一些通用的功能,为了不在每一类中重新写一遍这个方法的代码,就可以定义一个抽象类,这样一来,只需让每一个类继承抽象类就可以了,如果后期需要修改方法,只需要修改抽象类中的方法就行,如果子类想要自己实现不一样的行为,只需子类重写抽象类的方法。这样一来,普通类就可以完成这个工作,为什么需要抽象类,抽象类还起了一个限制作用,比如要求每一个子类必须自己独特实现的一个方法,也是抽象类定义的抽象方法。缺点也很明显,因为Java没有多继承,导致一个类只能继承一个父类。在表示是什么的关系时,一般使用抽象类。
    接口更多的是为了解耦。比如我需要制定一套方法的规范,就可以将这套方法规范抽象为一个接口。每一个继承这个接口的类都必须实现接口中所有的方法。在表示有什么的关系时,使用接口。

    0 赞同 0 条回复
  • mpweixin用户 永久会员 2023年5月25日 下午8:42

    Java中抽象是值被abstract修饰的类或方法,如果一个类中有一个抽象方法,那么该类必须用abstract修饰,但是抽象类中可以不存在抽象方法,抽象类不能够进行实例化。普通类可以继承一个抽象类,那么这个类就是该抽象类的直接子类,子类可以调用该抽象类的非抽象方法,也可以重写该抽象类的所有方法。需要注意的是,一个普通类只能继承一个父类。
    Java中的接口是用implement修饰,接口中只定义接口可以实现的方法而不给出具体的实现,继承了该接口的普通类需要实现该接口的所有的方法,接口可以说以被定义好的一种规范,所以实现了接口的普通类都需要遵守它。一个普通类可以实现多个接口,这个特点也弥补了单继承的缺点。

    0 赞同 0 条回复
  • Everglow 永久会员 2023年5月25日 上午12:18

    抽象类是自下而上的,也就是将一系列具有相同属性和方法的类抽离出来的类,抽象类是不可以被实例化的,也就意味着它只是一个抽象的概念,普通类通过继承抽象类来具体化这个抽象类,使用抽象类可以让代码更加健壮可拓展性更强

    而接口是自上而下的,通过定义一系列的行为也可以说一系列的规范,实现接口的类必须去遵守这些规范/行为。

    0 赞同 0 条回复
  • 秊 永久会员 2023年5月24日 下午4:53

    抽象在 Java 中是指被 abstract 修饰的类或方法,接口是指被 interface 修饰的类。接口中声明的方法,默认也被定义为 abstract 。

    抽象类和接口在设计上的区别是:抽象类是对「事物」的抽象,表示一种 “是什么” 的关系,即一个类应该具有哪些属性,行为等。而接口是对类局部的「行为」的抽象,表示一种 “能做什么” 的关系,即一个类应该能做哪些事。

    0 赞同 0 条回复

# 回答此问题

后才能回答