Java面试题:什么是Java中的接口?与抽象类有什么区别?

简介: Java面试题:什么是Java中的接口?与抽象类有什么区别?

一、什么是Java中的接口?与抽象类有什么区别?

Java中的接口(Interface)是一种引用类型,类似于类,用于存放抽象方法和静态常量。接口定义了一个规范,规定了实现接口的类应具备哪些方法。它是一种完全抽象的类型,不能直接实例化,必须由其他类来实现(implements)接口,并提供接口方法的具体实现。

Java接口与抽象类(Abstract Class)的区别主要在于:

  1. 默认方法的行为
  • 接口:从Java 8开始,接口可以包含默认方法(default关键字定义的方法),这些方法可以有自己的实现。这使得接口可以提供一些默认的行为,而实现类可以选择是否覆盖这些方法。
  • 抽象类:抽象类只能包含抽象方法(没有具体实现的方法)和具体方法(有具体实现的方法)。抽象类不能包含默认方法。
  1. 静态方法
  • 接口:接口可以包含静态方法(使用static关键字定义的方法)。
  • 抽象类:抽象类可以包含静态方法,也可以不包含。
  1. 实现
  • 接口:一个类可以实现多个接口,这体现了接口的用来定义多个类型的一种“契约”。
  • 抽象类:一个类只能继承一个抽象类,这体现了抽象类的单继承特性。
  1. 具体实例
  • 接口:接口不能被实例化,必须由类来实现接口。
  • 抽象类:抽象类可以被实例化,但是实例化的对象只能调用抽象类中具体方法,无法调用抽象方法。
  1. 用途
  • 接口:通常用于定义一个类应遵循的规范,例如网络协议或数据交换格式。
  • 抽象类:用于表示一个类的一部分,并实现一些具体功能,同时要求继承它的类实现剩下的功能。
    举个例子:
// 接口
public interface Vehicle {
    void applyBrake(int decrement);
    default void outOfFuel() {
        System.out.println("Out of fuel. Slowing down.");
    }
}
// 抽象类
public abstract class Machine {
    public abstract void start();
    public void stop() {
        System.out.println("Machine stopped");
    }
}
// 实现接口
public class Car implements Vehicle {
    @Override
    public void applyBrake(int decrement) {
        // 具体实现
    }
}
// 继承抽象类
public class CarEngine extends Machine {
    @Override
    public void start() {
        // 具体实现
    }
}


在这个例子中,Vehicle 是一个接口,它定义了 applyBrake 方法和一个默认方法 outOfFuel。Car 类实现了 Vehicle 接口。Machine 是一个抽象类,它定义了 start 方法和一个具体方法 stop。CarEngine 类继承了 Machine 类。

相关文章
|
4天前
|
Oracle 安全 Java
JDK8到JDK28版本升级的新特性问题之在Java 15及以后的版本中,密封类和密封接口是怎么工作的
JDK8到JDK28版本升级的新特性问题之在Java 15及以后的版本中,密封类和密封接口是怎么工作的
|
3天前
|
Java
SpringBoot java 一个接口,多个实现,客户定制化
SpringBoot java 一个接口,多个实现,客户定制化
10 0
|
4天前
|
Java API
Java9 Lambda 设计和实现问题之IntStream, LongStream 等类型特定的流接口基于 AbstractPipeline 是如何实现的
Java9 Lambda 设计和实现问题之IntStream, LongStream 等类型特定的流接口基于 AbstractPipeline 是如何实现的
|
4天前
|
NoSQL Java 数据库
2022年整理最详细的java面试题、掌握这一套八股文、面试基础不成问题[吐血整理、纯手撸]
这篇文章是一份详尽的Java面试题总结,涵盖了从面向对象基础到分布式系统设计的多个知识点,适合用来准备Java技术面试。
|
4天前
|
算法 关系型数据库 MySQL
一天五道Java面试题----第七天(mysql索引结构,各自的优劣--------->事务的基本特性和隔离级别)
这篇文章是关于MySQL的面试题总结,包括索引结构的优劣、索引设计原则、MySQL锁的类型、执行计划的解读以及事务的基本特性和隔离级别。
|
5天前
|
自然语言处理 NoSQL Java
一天一道Java面试题----第十二天(如何实现接口幂等性)
这篇文章探讨了实现Java接口幂等性的几种方法,包括使用唯一ID、服务端token、去重表、版本控制以及控制状态等策略。
|
11月前
|
Java
Java接口和抽象类
Java接口和抽象类
73 0
|
3月前
|
设计模式 搜索推荐 Java
java接口和抽象类的区别,以及使用选择
java接口和抽象类的区别,以及使用选择
38 0
|
3月前
|
Java
Java的接口与抽象类的区别
Java的接口与抽象类的区别
|
3月前
|
Java 编译器
java类和对象:继承、多态、接口、抽象类-2
java类和对象:继承、多态、接口、抽象类
45 0