java中接口和抽象类区别详解(代码片段)

小志的博客 小志的博客     2022-12-24     167

关键词:

参考:https://www.cnblogs.com/dolphin0520/p/3811437.html

一、抽象方法

  • 抽象方法是一种特殊的方法:它只有声明,而没有具体的实现。抽象方法的声明格式为:

    abstract void eat()
    
  • 抽象方法必须用abstract关键字进行修饰。

二、抽象类

1、抽象类的理解

  • 如果一个类含有抽象方法,则称这个类为抽象类。抽象类必须在类前用abstract关键字修饰。
  • 因为抽象类中含有无具体实现的方法,所以不能用抽象类创建对象。
  • 包含抽象方法的类称为抽象类,但并不意味着抽象类中只能有抽象方法,它和普通类一样,同样可以拥有成员变量和普通的成员方法。

三、抽象类和普通类的区别

  • 抽象方法必须为public或者protected(因为如果为private,则不能被子类继承,子类便无法实现该方法),缺省情况下默认为public。如下图:

  • 抽象类不能用来创建对象。如下图:

  • 如果一个类继承于一个抽象类,则子类必须实现父类的抽象方法。如下图:

  • 如果一个类继承于一个抽象类,如果子类没有实现父类的抽象方法,则必须将子类也定义为为abstract类。如下图:

  • 在其他方面,抽象类和普通的类并没有区别。

四、接口

1、接口的理解

  • 接口,英文称作interface,在软件工程中,接口泛指供别人调用的方法或者函数。从这里,我们可以体会到Java语言设计者的初衷,它是对行为的抽象。在Java中,定一个接口的形式如下:

    public interface InterfaceName 
    
    
  • 接口中的变量会被隐式地指定为public static final变量(并且只能是public static final变量,用private修饰会报编译错误),如下图:

  • 接口中的方法会被隐式地指定为public abstract方法且只能是public abstract方法(用其他关键字,比如private、protected、static、 final等修饰会报编译错误),并且接口中所有的方法不能有具体的实现,也就是说,接口中的方法必须都是抽象方法。

  • 允许一个类遵循多个特定的接口。如果一个非抽象类遵循了某个接口,就必须实现该接口中的所有方法。如下图:

  • 允许一个类遵循多个特定的接口。对于遵循某个接口的抽象类,可以不实现该接口中的抽象方法。

五、抽象类和接口的区别

1、语法层面上的区别

  • 抽象类可以提供成员方法的实现细节,而接口中只能存在public abstract 方法;
  • 抽象类中的成员变量可以是各种类型的,而接口中的成员变量只能是public static final类型的;
  • 接口中不能含有静态代码块以及静态方法,而抽象类可以有静态代码块和静态方法;
  • 一个类只能继承一个抽象类,而一个类却可以实现多个接口。

2、设计层面上的区别

  • 抽象类是对一种事物的抽象,即对类抽象,而接口是对行为的抽象。抽象类是对整个类整体进行抽象,包括属性、行为,但是接口却是对类局部(行为)进行抽象。举个简单的例子,飞机和鸟是不同类的事物,但是它们都有一个共性,就是都会飞。那么在设计的时候,可以将飞机设计为一个类Airplane,将鸟设计为一个类Bird,但是不能将 飞行 这个特性也设计为类,因此它只是一个行为特性,并不是对一类事物的抽象描述。此时可以将 飞行 设计为一个接口Fly,包含方法fly( ),然后Airplane和Bird分别根据自己的需要实现Fly这个接口。然后至于有不同种类的飞机,比如战斗机、民用飞机等直接继承Airplane即可,对于鸟也是类似的,不同种类的鸟直接继承Bird类即可。从这里可以看出,继承是一个 "是不是"的关系,而 接口 实现则是 "有没有"的关系。如果一个类继承了某个抽象类,则子类必定是抽象类的种类,而接口实现则是有没有、具备不具备的关系,比如鸟是否能飞(或者是否具备飞行这个特点),能飞行则可以实现这个接口,不能飞行就不实现这个接口。
  • 设计层面不同,抽象类作为很多子类的父类,它是一种模板式设计。而接口是一种行为规范,它是一种辐射式设计。什么是模板式设计?最简单例子,大家都用过ppt里面的模板,如果用模板A设计了ppt B和ppt C,ppt B和ppt C公共的部分就是模板A了,如果它们的公共部分需要改动,则只需要改动模板A就可以了,不需要重新对ppt B和ppt C进行改动。而辐射式设计,比如某个电梯都装了某种报警器,一旦要更新报警器,就必须全部更新。也就是说对于抽象类,如果需要添加新的方法,可以直接在抽象类中添加具体的实现,子类可以不进行变更;而对于接口则不行,如果接口进行了变更,则所有实现这个接口的类都必须进行相应的改动。

java基础相关(代码片段)

1.接口和抽象类1).接口的特点2).抽象类特点3).接口和抽象类相同点4).接口和抽象类的区别2.抽象类和普通类的区别3.“==”和equals的区别4.Set和Map区别5.互斥锁与同步锁的区别6.读写锁7.session和cookie的区别8.重写和重载9.内存溢... 查看详情

java中接口和抽象类的区别?(代码片段)

抽象类抽象类必须用abstract修饰,子类必须实现抽象类中的抽象方法,如果有未实现的,那么子类也必须用abstract修饰。抽象类默认的权限修饰符为public,可以定义为public或procted,如果定义为private,那么子类则无法继承。抽象类... 查看详情

java中抽象类和接口的区别?(代码片段)

...象方法不能用private修饰//如何声明abstractvoidfunc();什么是接口?接口是一种规范publicinterfaceinter //声明方法和变量 publicabstractvoidfunc();//默认publicabstract修饰 inta=2;//默认publicfinalstatic修饰必须赋值操作 defultvoidfunc1() //default修饰可以实... 查看详情

接口和抽象类的区别(代码片段)

前言:抽象类和接口都是在一定程度上体现到了java的多态特性。那么在使用场景上,它们有什么区别呢?在语法方面:抽象类:1.由abstract关键词修饰的类称之为抽象类。2.抽象类中没有实现的方法称之为抽象方法,也需要加关... 查看详情

接口和抽象类的区别(代码片段)

接口和抽象类抽象类的定义抽象类的特征接口的定义接口的特征接口和抽象类的区别1.应用场景2.语法层面使用抽象类的定义在Java面向对象当中,所有的对象都是用过类进行描绘的,但是并不是所有的类都是用来描绘对象... 查看详情

java抽象类详解(代码片段)

  在《Java中的抽象方法和接口》中,介绍了抽象方法与接口,以及做了简单的比较。  这里我想详细探讨下抽象类。    一、抽象类的定义  被关键字“abstract”修饰的类,为抽象类。(而且,abxtract只能修饰... 查看详情

java---抽象类和接口基础知识详解(及两者异同点)(代码片段)

    在本篇博客中将介绍JAVA里抽象类和接口的基础知识以及两者的异同点,在有继承和多态的基础知识上学习会更好~目录抽象类基础知识抽象类的定义、创建等基础抽象类的几点说明(一) 为何使用抽象方法抽象... 查看详情

java中抽象类和接口的区别(代码片段)

...、鼠标垫、马克杯等)直接跳到末尾去评论区领书抽象类vs接口方法类型:接口只能有抽象方法。抽象类可以有抽象和非抽象方法。从Java8开始,它也可以有默认和静态方法。最终变量:在Java接口中声明的变量默认是最... 查看详情

接口跟抽象类之间的区别(代码片段)

接口和抽象类有什么区别你选择使用接口和抽象类的依据是什么?接口:interfaceAnimalpublicvoideat();publicvoidtravel();抽象类:/*文件名:Employee.java*/publicabstractclassEmployeeprivateStringname;privateStringaddress;privateintnumber;publicE 查看详情

java抽象类与接口的区别(代码片段)

很多常见的面试题都会出诸如抽象类和接口有什么区别,什么情况下会使用抽象类和什么情况你会使用接口这样的问题。本文我们将仔细讨论这些话题。在讨论它们之间的不同点之前,我们先看看抽象类、接口各自的特性。抽象... 查看详情

抽象类和接口的区别(代码片段)

a.接口中的所有方法都是抽象的,而抽象类可以定义带有方法体的不同方法。b.一个类可以实现多个接口,而只能继承一个抽象父类。c.接口与实现它的类不构成继承体系,而抽象类是属于一个类的继承体系。d.接口中的方法默认... 查看详情

抽象类和接口的区别(代码片段)

a.接口中的所有方法都是抽象的,而抽象类可以定义带有方法体的不同方法。b.一个类可以实现多个接口,而只能继承一个抽象父类。c.接口与实现它的类不构成继承体系,而抽象类是属于一个类的继承体系。d.接口中的方法默认... 查看详情

java—爆肝1w字❤只为弄懂抽象类和接口(代码片段)

抽象类与接口抽象类定义和语法理解抽象类作用抽象类总结:接口概念接口特性注意事项:实现多个接口接口使用实例Clonable接口和深拷贝抽象类和接口的区别?抽象类定义和语法包含抽象方法的类,叫做抽象类... 查看详情

接口和抽象类的区别(代码片段)

    需求:接口是否可继承接口? 抽象类是否可实现(implements)接口? 抽象类是否可继承实体类(concreteclass)? 抽象类中是否可以有静态的main方法?    先说明二者的定义,然后聊聊需求,最后... 查看详情

c#中抽象方法与虚方法的区别详解及示例(代码片段)

...义和语句,请移步:C#多态性学习,虚方法、抽象方法、接口等用法详解。我们具体看个例子来帮助理解,首先是虚方法:publicclassShapepublicvirtualdoubleCalculateArea()return0;publicclassCircle:ShapepublicdoubleRadiusget;set;publicoverridedoubleCalculateAre... 查看详情

接口和抽象类的区别(代码片段)

...的区别 1)抽象类可以提供成员方法的实现细节,而接口中只能存在publicabstract方法; 2)抽象类中的成员变量可以是各种类型的,而接口中的成员变量只能是publicstaticfinal类型的; 3)接口中不能含有静态代码块以及... 查看详情

java--每日一问:谈谈接口和抽象类有什么区别?(代码片段)

典型回答接口和抽象类是Java面向对象设计的两个基础机制。接口是对行为的抽象,它是抽象方法的集合,利用接口可以达到API定义和实现分离的目的。接口,不能实例化;不能包含任何非常量成员,任何field... 查看详情

接口和抽象类有什么区别(代码片段)

接口和抽象类有什么区别你选择使用接口和抽象类的依据是什么?接口和抽象类的概念不一样。接口是对动作的抽象,抽象类是对根源的抽象。抽象类表示的是,这个对象是什么。接口表示的是,这个对象能做什么。比如,男人... 查看详情