精华内容
下载资源
问答
  • Java 抽象类与接口区别是什么?1、抽象类可以提供某些方法的部分实现,而接口不可以;2、抽象类是单个继承机制,其子类不一定要实现父类中的所有没实现的方法,而接口一个类可以有多个接口,并且方法都要实现。理解...

    445b47bdf1c2645026931439f87673c3.png

    Java 抽象类与接口区别是什么?

    1、抽象类可以提供某些方法的部分实现,而接口不可以;

    2、抽象类是单个继承机制,其子类不一定要实现父类中的所有没实现的方法,而接口一个类可以有多个接口,并且方法都要实现。

    理解抽象类

    abstractclass和interface在Java语言中都是用来进行抽象类(本文中的抽象类并非从abstractclass翻译而来,它表示的是一个抽象体,而abstractclass为Java语言中用于定义抽象类的一种方法,请读者注意区分)定义的,那么什么是抽象类,使用抽象类能为我们带来什么好处呢?

    在面向对象的概念中,我们知道所有的对象都是通过类来描绘的,但是反过来却不是这样。并不是所有的类都是用来描绘对象的,如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类。抽象类往往用来表征我们在对问题领域进行分析、设计中得出的抽象概念,是对一系列看上去不同,但是本质上相同的具体概念的抽象。比如:如果我们进行一个图形编辑软件的开发,就会发现问题领域存在着圆、三角形这样一些具体概念,它们是不同的,但是它们又都属于形状这样一个概念,形状这个概念在问题领域是不存在的,它就是一个抽象概念。正是因为抽象的概念在问题领域没有对应的具体概念,所以用以表征抽象概念的抽象类是不能够实例化的。

    在面向对象领域,抽象类主要用来进行类型隐藏。我们可以构造出一个固定的一组行为的抽象描述,但是这组行为却能够有任意个可能的具体实现方式。这个抽象描述就是抽象类,而这一组任意个可能的具体实现则表现为所有可能的派生类。模块可以操作一个抽象体。由于模块依赖于一个固定的抽象体,因此它可以是不允许修改的;同时,通过从这个抽象体派生,也可扩展此模块的行为功能。熟悉OCP的读者一定知道,为了能够实现面向对象设计的一个最核心的原则 OCP(Open-ClosedPrinciple),抽象类是其中的关键所在。推荐教程:《Java教程》

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

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

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

    抽象类

    抽象类是用来捕捉子类的通用特性的 。它不能被实例化,只能被用作子类的超类。抽象类是被用来创建继承层级里子类的模板。以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);

    }

    }

    抽象类和接口的对比

    2f4aa3c0010864d4bf154b00794f08d8.png

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

    如果你拥有一些方法并且想让它们中的一些有默认实现,那么使用抽象类吧。

    如果你想实现多重继承,那么你必须使用接口。由于Java不支持多继承,子类不能够继承多个类,但可以实现多个接口。因此你就可以使用接口来解决它。

    如果基本功能在不断改变,那么就需要使用抽象类。如果不断改变基本功能并且使用接口,那么就需要改变所有实现了该接口的类。

    以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

    展开全文
  • 一、抽象类对于抽象类有“三必须”“五不能”。三必须(三种情况必须定义为抽象类):1、一个类中直接定义了一个或多个抽象方法;2、一个类继承了一个抽象父类,但没有实现父类中的抽象方法;3、一个类实现了一个...

    一、抽象类

    对于抽象类有“三必须”与“五不能”。

    三必须(三种情况必须定义为抽象类):

    1、一个类中直接定义了一个或多个抽象方法;

    2、一个类继承了一个抽象父类,但没有实现父类中的抽象方法;

    3、一个类实现了一个接口,但没有完全实现接口包含的抽象方法;

    五不能:

    1、抽象类不能被实例化(即抽象类不能被new);

    2、abstract与final永远不能同时使用(final修饰的类不能被继承,修饰的方法不能被重写;而abstract修饰的类只能被继承才有意义,修饰的方法必须被重写才有意义);

    3、abstract与static不能同时修饰方法(static修饰的方法属于类本身,如果抽象方法被static修饰,通过类调用该方法时会因为没有方法体而出错);

    4、abstract与private不能同时使用(abstract修饰的方法必须重写才有意义,而private使访问权限受限);

    5、abstract不能修饰变量(即没有抽象变量);

    二、接口

    接口是彻底化的抽象类。

    需要注意的是:

    1、一个接口可以有多个父接口,但接口只能继承接口,不能继承类;

    2、接口里的方法全是抽象方法(public abstract);

    3、接口里定义的字段(Field)只能是是常量(public static final);

    三、抽象类与接口相似之处

    1、抽象类与接口不能被实例化,只能被其他类继承或实现;

    2、抽象类和接口都可以包含抽象方法,抽象类的继承类与接口的实现类都必须实现父类中的抽象方法;

    四、抽象类与接口的主要区别

    1、设计目的区别:抽象类体现的是一种模板式的设计,用户可以在这个基础上增加完善功能;而接口体现的是一种规范,用户只能且必须完成这个规范;

    2、抽象类可以包含普通方法,而接口不可以;

    3、Java中一个类只能有一个直接父类,但一个类可以实现多个接口,接口从某种程度上说弥补了Java单继承的不足;

    4、抽象类可以包含构造器,用于抽象类的初始化,而接口不可以;

    展开全文
  • Java 抽象类与接口 编程练习

    千次阅读 2021-02-28 18:21:42
    一、面向抽象编程7175 编程题 编程语言:Java題目內容:使用接口或者抽象类编写程序实现显示员工基本信息。具体要求如下:(1)使用接口或者抽象类实现基类Employer(体会接口抽象类的不同),包含姓名、部门和工资三个...

    一、面向抽象编程

    7175 编程题 编程语言:Java

    題目內容:

    使用接口或者抽象类编写程序实现显示员工基本信息。具体要求如下:

    (1)使用接口或者抽象类实现基类Employer(体会接口和抽象类的不同),包含姓名、部门和工资三个属性,显示工资的方法showSalary()和显示奖金的抽象方法showBonus();提示:因每位职工奖金不同,showBonus()方法定义为抽象方法,只抽象定义,不具体实现;

    (2)定义BasicEmployee和GoodEmployee类,重写Employer类中的方法,不同员工有不同的工资和奖金;

    (3)定义主类进行测试,要求输入两个不同的员工信息,并输出其个人信息。

    输入输出说明:

    输入:

    张三 前台 5000

    李四 开发 6000 4000

    输出:

    我叫张三,在前台部门,我的工资是5000.0

    我是普通员工,没有奖金,加油升级!

    我叫李四,在开发部门,我的工资是6000.0

    我是优秀员工,我的奖金是4000.0

    代码:

    import java.util.*;

    abstract class Employer {//定义抽象类作为父类

    String name;//姓名

    String department;//部门

    double salary;//工资

    double bonus;//奖金

    abstract void showSalary();//输出工资的抽象方法

    abstract void showBonus();//输出奖金的抽象方法

    }

    class BasicEmployee extends Employer {

    BasicEmployee(String n,String d,double s) {

    this.name=n;

    this.department=d;

    this.salary=s;

    }

    void showSalary() {

    System.out.printf("我叫%s,在%s部门,我的工资是%.1f\n",this.name,this.department,this.salary);

    }

    void showBonus() {

    System.out.printf("我是普通员工,没有奖金,加油升级!\n");

    }

    }

    class GoodEmployee extends Employer {

    GoodEmployee(String n,String d,double s,double b) {

    this.name=n;

    this.department=d;

    this.salary=s;

    this.bonus=b;

    }

    void showSalary() {

    System.out.printf("我叫%s,在%s部门,我的工资是%.1f\n",this.name,this.department,this.salary);

    }

    void showBonus() {

    System.out.printf("我是优秀员工,我的奖金是%.1f\n",this.bonus);

    }

    }

    public class Main {

    public static void main(String[] args) {

    Scanner cin=new Scanner(System.in);

    Employer e;

    String n1=cin.next();

    String d1=cin.next();

    int s1=cin.nextInt();

    e=new BasicEmployee(n1,d1,s1);

    e.showSalary();

    e.showBonus();

    String n2=cin.next();

    String d2=cin.next();

    int s2=cin.nextInt();

    int b2=cin.nextInt();

    e=new GoodEmployee(n2,d2,s2,b2);

    e.showSalary();

    e.showBonus();

    }

    }

    二、面向接口编程

    7178 编程题 编程语言:Java

    題目內容:

    编写一个USB接口程序,模拟计算机启动过程和关闭过程启动过程中要加载鼠标、键盘、麦克风等USB设备,具体要求如下:

    (1)定义一个接口USB,包含两个抽象方法turnOn()he turnOff(),分别用于表示USB设备的启动和关闭

    (2)编写鼠标Mouse、键盘KeyBoard、麦克风Mic类,实现接口中的turnOn()、turnOff()方法,方法中显示“XX设备启动了”或“XX设备关闭了”即可

    (3)编写计算机类Computer,要求有一个表示计算机上USB插槽数量的数组;添加USB设备的方法add(USB usb),功能为遍历所有插槽,如果有空闲的就添加一个USB设备

    模拟开机启动USB设备的powerOn()方法,功能为遍历所有USB接口,如果连接了USB设备,则启动USB设备,然后显示“计算机开机成功”

    模拟关机关闭USB设备的powerOff()方法,功能为遍历所有USB接口,如果连接了USB设备,则关闭USB设备,然后显示“计算机关机成功”

    (4)编写测试类,要求建立计算机对象,建立鼠标、键盘、麦克风对象,并添加到计算机中,启动计算机,关闭计算机

    输入输出说明:

    无输入;

    输出:

    鼠标启动了

    键盘启动了

    麦克启动了

    计算机开机成功

    鼠标关闭了

    键盘关闭了

    麦克关闭了

    计算机关机成功

    代码:

    import java.util.*;

    interface USB {//定义接口

    void turnOn();

    void turnOff();

    }

    class Mouse implements USB {

    final String name="鼠标";

    public String getName() {

    return this.name;

    }

    public void turnOn() {

    System.out.printf("%s启动了\n",getName());

    }

    public void turnOff() {

    System.out.printf("%s关闭了\n",getName());

    }

    }

    class KeyBoard implements USB {

    final String name="键盘";

    public String getName() {

    return this.name;

    }

    public void turnOn() {

    System.out.printf("%s启动了\n",getName());

    }

    public void turnOff() {

    System.out.printf("%s关闭了\n",getName());

    }

    }

    class Mic implements USB {

    final String name="麦克";

    public String getName() {

    return this.name;

    }

    public void turnOn() {

    System.out.printf("%s启动了\n",getName());

    }

    public void turnOff() {

    System.out.printf("%s关闭了\n",getName());

    }

    }

    class Computer {

    USB usb[]=new USB[10];//定义USB接口数组

    int number;

    public void add(USB u) {

    usb[++number]=u;

    }

    public void powerOn() {

    for(USB u:usb) {

    if(u!=null)u.turnOn();

    }

    System.out.printf("计算机开机成功\n");

    }

    public void powerOff() {

    for(USB u:usb) {

    if(u!=null)u.turnOff();

    }

    System.out.printf("计算机关机成功\n");

    }

    }

    public class Main {

    public static void main(String[] args) {

    Computer c=new Computer();

    c.add(new Mouse());

    c.add(new KeyBoard());

    c.add(new Mic());

    c.powerOn();

    c.powerOff();

    }

    }

    本文同步分享在 博客"nefu_ljw"(CSDN)。

    如有侵权,请联系 support@oschina.cn 删除。

    本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

    展开全文
  • 抽象类抽象类是用来捕捉子类的通用特性的 。它不能被实例化,只能被用作子类的超类。抽象类是被用来创建继承层级里子类的模板。以JDK中的GenericServlet为例:public abstract class GenericServlet ...
  • Java 抽象类与接口的区别是什么?抽象类:在Java中被abstract关键字修饰的类称为抽象类,被abstract关键字修饰的方法称为抽象方法,抽象方法只有方法的声明,没有方法体。抽象类的特点:1、抽象类不能被实例化只能被...
  • java抽象类与接口区别

    2021-03-15 18:00:16
    abstract class和interface是Java语言中对于抽象类定义进行支持的两种机制,正是由于这两种机制的存在,才赋予了Java强大的面向对象能力。 abstract class和interface之间在对于抽象类定义的支持方面具有很大的相似...
  • java抽象类与接口

    2021-11-18 13:42:45
    abstract修饰类:抽象类 此类不能被实例化 抽象内中一定有构造器,便于子类实例化时调用(涉及:子类实例化的全过程) 开发中,都会提供抽象类的子类,让子类独享实例化,完成相关的操作 abstract修饰方法:抽象...
  • 一....1.抽象类不能进行实例化,想要使用,只能创建该抽象类的子类,然后让子类重写抽象类中的抽象方法. 2.在抽象类中可以有和普通类一样的数据成员和方法,其方法可以被重写,也可以被子类直接调用. 3.
  • JAVA 抽象类与接口

    2021-12-15 13:56:23
    一、抽象类 如果一个类含有抽象方法,则称这个类为抽象类抽象类是用abstract关键词修饰的。因为抽象类中含有无具体实现的方法,所以不能用抽象类创建对象。如果一个类继承了抽象类,那么就必须为抽象类中的抽象...
  • 接口存在的原因:JAVA是单继承的,不支持多继承,但是有了接口JAVA可以实现多个接口;一个要是实现某一个接口就必须实现接口内声明的所有方法(强迫执行,即便是空方法,也要实现);接口特点:1.接口内所有方法...
  • 抽象类java程序中,允许在定义方法时不写方法实体,这种方法被称为抽象方法,抽象方法必须使用abstract关键字修饰。抽象方法是一种特殊的方法:它只有声明,而没有具体的实现。abstract void fun();如果一个类中...
  • Java抽象类与接口

    2021-09-04 17:03:45
    Java中,一个没有方法体的方法叫做抽象方法,该类必须定义为抽象类 public abstract class animals{ public abstract void eat ();//不包含方法体,注意代码中出现了两次abstract这一关键词 } 抽象类不是具体...
  • 随着互联网的不断发展,越来越多的程序员都开始学习java编程语言,而进我们就一起来了解一下,java编程中抽象类与接口的区别和应用场景。一、抽象类抽象类体现了数据抽象的思想(不然呢),是实现多态的一种机制。抽象...
  • 类:不能被定义为抽象类或是接口,不可被继承。 private int index; private static final double pai=3.14; //在声明时同时赋值,往往static一起使用 private final int level; public Test(){ level=0;
  • 一.java抽象类抽象类针对的是类.包含抽象方法的类称为抽象类,但抽象类中可以没有抽象方法,它和普通类一样,同样可以拥有成员变量和普通的成员方法。抽象类有以下几个特点1.抽象方法必须为public或者protected(因为...
  • Java实验7抽象类接口》由会员分享,可在线阅读,更多相关《Java实验7抽象类接口(11页珍藏版)》请在人人文库网上搜索。1、实验6抽象类接口一、 实验目的:1、 学习掌握抽象类的概念和使用方法。2、 学习掌握...
  • 1、抽象类(关键字:abstract) 在继承的层次结构中,每个新的子类都使类变得更加明确和具体。如果从一个子类向父类追溯,类就会变得更通用、更加不明确。类的设计应该确保父类包含它的子类的共同特性。有时候,...
  • 本文实例讲述了Java接口抽象类。分享给大家供大家参考。具体分析如下:对于面向对象编程来说,抽象是它的一大特征之一。在Java中,可以通过两种形式来体现OOP的抽象:接口抽象类。这两者有太多相似的地方,又...
  • Java8中的默认方法和静态方法的由来,首先还是先重温一下抽象类接口的区别:抽象类抽象类是用来捕捉子类的通用特性的 。它不能被实例化,只能被用作子类的超类。抽象类是被用来创建继承层级里子类的模板。public ...
  • 第六章练习题(抽象类与接口)1.下列有关抽象类的叙述正确的是哪项?A.抽象类中一定含有抽象方法B.抽象类的声明必须包含abstract关键字C.抽象类既能被实例化也能被继承D.抽象类中不能有构造方法2.下列有关抽象...
  • 抽象类接口的总结

    2021-03-13 19:35:52
    类的表现形式Java代码public class A{}类的特点:1)类中的属性可以是成员属性,也可以是...可以调用构造方法创造对对象一个类只能继承一个父类,单根继承Java代码public class A{}public class B extends A{}抽象类...
  • 接口抽象类的相同点(1)接口抽象类都是一种类型(2)一个具体类继承一个抽象类或实现一个接口的时候必须要实现接口抽象类中全部的抽象方法(3)一个类继承一个抽象类或实现一个接口的时候,如果仅仅实现了抽象类或...
  • Java抽象类和Java接口一样,都用来声明一个新的类型。并且作为一个类型的等级结构的起点。(2).格式:public abstract class abstractDemo{/**属性*/private String name;/**方法*/public abstract void f...
  • 理解抽象abstract class和interface是Java中对于抽象类定义两种机制,正是因为这两种机制的存在,才赋予Java强大的面向对象能力。abstract class和interface之间在对于抽象类定义的支持方面具备至关大的类似性,设置...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 551,871
精华内容 220,748
关键字:

java抽象类与接口

java 订阅