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

songhuiqiang songhuiqiang     2022-12-05     250

关键词:

很多常见的面试题都会出诸如抽象类和接口有什么区别,什么情况下会使用抽象类和什么情况你会使用接口这样的问题。本文我们将仔细讨论这些话题。

在讨论它们之间的不同点之前,我们先看看抽象类、接口各自的特性。

抽象类

抽象类是用来捕捉子类的通用特性的 。它不能被实例化,只能被用作子类的超类。抽象类是被用来创建继承层级里子类的模板。以JDK中的GenericServlet为例:

技术图片
public abstract class GenericServlet implements Servlet, ServletConfig, Serializable 
    // abstract method
    abstract void service(ServletRequest req, ServletResponse res);
 
    void init() 
        // Its implementation
    
    // other method related to Servlet
技术图片

当HttpServlet类继承GenericServlet时,它提供了service方法的实现:

 

技术图片
public class HttpServlet extends GenericServlet 
    void service(ServletRequest req, ServletResponse res) 
        // implementation
    
 
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) 
        // Implementation
    
 
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) 
        // Implementation
    
 
    // some other methods related to HttpServlet
技术图片

 

接口

接口是抽象方法的集合。如果一个类实现了某个接口,那么它就继承了这个接口的抽象方法。这就像契约模式,如果实现了这个接口,那么就必须确保使用这些方法。接口只是一种形式,接口自身不能做任何事情。以Externalizable接口为例:

 

public interface Externalizable extends Serializable 
 
    void writeExternal(ObjectOutput out) throws IOException;
 
    void readExternal(ObjectInput in) throws IOException, ClassNotFoundException;

 

当你实现这个接口时,你就需要实现上面的两个方法:

技术图片
public class Employee implements Externalizable 
 
    int employeeId;
    String employeeName;
 
    @Override
    public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException 
        employeeId = in.readInt();
        employeeName = (String) in.readObject();
 
    
 
    @Override
    public void writeExternal(ObjectOutput out) throws IOException 
 
        out.writeInt(employeeId);
        out.writeObject(employeeName);
    
技术图片

抽象类和接口的对比

技术图片

 

 

什么时候使用抽象类和接口

  • 如果你拥有一些方法并且想让它们中的一些有默认实现,那么使用抽象类吧。
  • 如果你想实现多重继承,那么你必须使用接口。由于Java不支持多继承,子类不能够继承多个类,但可以实现多个接口。因此你就可以使用接口来解决它。
  • 如果基本功能在不断改变,那么就需要使用抽象类。如果不断改变基本功能并且使用接口,那么就需要改变所有实现了该接口的类。

 

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

1.抽象类1.1抽象类概念在面向对象的概念中,所有的对象都是通过类来描绘的,但是反过来,并不是所有的类都是用来描绘对象的,如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类1.2抽象类语法在J... 查看详情

java抽象类与接口的区别

抽象类抽象类是用来捕捉子类的通用特性的。它不能被实例化,只能被用作子类的超类。抽象类是被用来创建继承层级里子类的模板。以JDK中的GenericServlet为例:publicabstractclassGenericServletimplementsServlet,ServletConfig,Serializable{//abstract... 查看详情

抽象类与接口的区别

抽象类与接口的区别 abstractclass和interface是Java语言中对于抽象类定义进行支持的两种机制,正是由于这两种机制的存在,才赋予了Java强大的面向对象能力。abstractclass和interface之间在对于抽象类定义的支持方面具有很大的相... 查看详情

java抽象类与接口编程练习(代码片段)

一、面向抽象编程7175编程题编程语言:Java題目內容:使用接口或者抽象类编写程序实现显示员工基本信息。具体要求如下:(1)使用接口或者抽象类实现基类Employer(体会接口和抽象类的不同),包含姓名... 查看详情

抽象类与接口(代码片段)

抽象类abstract关键字可以修饰方法----->抽象方法也可以修饰类----->抽象类抽象类可以没有抽象方法,但有抽象方法的类一定要声明为抽象类抽象类就是:类的抽象定义抽象类在Java语言中使用abstractclass来定义抽象类。如下实... 查看详情

抽象类与接口(代码片段)

...“可扩展性”,能够满足用户需求的不断变更。使用抽象类和接口是实现“可复用性”和“可扩展性”重要的设计手段。抽象类Java语言提供了两种类:一种是具体类;另一种是抽象了。前面章节接触的类都是具体类... 查看详情

java面试题-抽象类与接口的区别

抽象类与接口的区别,这是一个经常被问到面试题,区别主要有以下几点,我们可以从几个方面进行分析:(一)继承方面:(1)抽象类只能单继承;接口可以多实现(二)成员属性方面:(1)抽象类中可以有普... 查看详情

抽象类与接口区别

...存在的意义在于解耦,增强代码的可拓展性,可维护性。抽象类:常用于充当公共角色,用于被其子类继承,子类继承其实现的方法,去重写其抽象的方法。继承更倾向于对类的完善。 举个栗子:接口:小明是i西科的码手... 查看详情

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

一.认识抽象类1.简介假设要编写一个计算圆、三角形和矩形的面积与周长的程序。若按照前面所学的方式编程,就必须定义3个类:圆类、三角形类、矩形类,它们之间没有继承关系。程序写好之后虽然能执行,但... 查看详情

重新认识java----抽象类与接口(代码片段)

你很清楚的知道什么时候用抽象类,什么时候用接口么?p.s.多文字预警!1抽象类和接口简介1.1抽象类1.1.1一个小案例我们先来看这样一个案例:世界上有许许多多不同种类的动物,每一种动物都要吃东西,... 查看详情

抽象类与接口(代码片段)

第四章:抽象类与接口知识梳理本章内容:抽象类、final关键字、接口首先是第一个内容:抽象类的创建和使用(1)所谓抽象:就是不具体,细节不明确。此时就可以将一个类定义为抽象类。下面我们... 查看详情

抽象类与接口(代码片段)

第四章:抽象类与接口知识梳理本章内容:抽象类、final关键字、接口首先是第一个内容:抽象类的创建和使用(1)所谓抽象:就是不具体,细节不明确。此时就可以将一个类定义为抽象类。下面我们... 查看详情

抽象类与接口的区别

抽象类的定义:成员属性:可以是变量,也可以是常量成员方法:可以抽象,也可以非抽象(比如:构造方法是一定会有的)接口类的定义:成员属性:只能是常量(publicstaticfinal)成员方法:只能是抽象(接口没有构造方法,... 查看详情

java抽象类和接口的区别

 成员区别抽象类:成员变量:可以变量,也可以常量构造方法:有成员方法:可以抽象,也可以非抽象 接口:成员变量:只可以是常量成员方法:只可以抽象 关系区别类与类:继承,单继承 类与接口:实现,单... 查看详情

抽象类与接口的区别

接口(interface)可以说成是抽象类的一种特例,接口中的所有方法都必须是抽象的。接口中的方法定义默认为publicabstract类型,接口中的成员变量类型默认为publicstaticfinal。另外,接口和抽象类在方法上有区别:    ... 查看详情

android面试每日一题:抽象类与接口的区别?

大体区别如下:抽象类可以提供成员方法的实现细节,而接口中只能存在public抽象方法;抽象类中的成员变量可以是各种类型的,而接口中的成员变量只能是publicstaticfinal类型的;接口中不能含有构造器、静态... 查看详情

android面试每日一题:抽象类与接口的区别?

大体区别如下:抽象类可以提供成员方法的实现细节,而接口中只能存在public抽象方法;抽象类中的成员变量可以是各种类型的,而接口中的成员变量只能是publicstaticfinal类型的;接口中不能含有构造器、静态... 查看详情

java抽象类与接口

...我们提供了一种将接口与实现分离的更加结构化的方法。抽象类与接口是Java语言中对抽象概念进行定义的两种机制,正是由于他们的存在才赋予Java强大的面向对象的能力。他们两者之间对抽象概念的支持有很大的相似,甚至可... 查看详情