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 类。

相关文章
|
算法 Java
50道java集合面试题
50道 java 集合面试题
|
算法 安全 Java
除了类,Java中的接口和方法也可以使用泛型吗?
除了类,Java中的接口和方法也可以使用泛型吗?
316 11
|
12月前
|
Java Go 开发工具
【Java】(9)抽象类、接口、内部的运用与作用分析,枚举类型的使用
抽象类必须使用abstract修饰符来修饰,抽象方法也必须使用abstract修饰符来修饰,抽象方法不能有方法体。抽象类不能被实例化,无法使用new关键字来调用抽象类的构造器创建抽象类的实例。抽象类可以包含成员变量、方法(普通方法和抽象方法都可以)、构造器、初始化块、内部类(接 口、枚举)5种成分。抽象类的构造器不能用于创建实例,主要是用于被其子类调用。抽象类中不一定包含抽象方法,但是有抽象方法的类必定是抽象类abstract static不能同时修饰一个方法。
424 1
|
存储 缓存 安全
Java集合框架(二):Set接口与哈希表原理
本文深入解析Java中Set集合的工作原理及其实现机制,涵盖HashSet、LinkedHashSet和TreeSet三大实现类。从Set接口的特性出发,对比List理解去重机制,并详解哈希表原理、hashCode与equals方法的作用。进一步剖析HashSet的底层HashMap实现、LinkedHashSet的双向链表维护顺序特性,以及TreeSet基于红黑树的排序功能。文章还包含性能对比、自定义对象去重、集合运算实战和线程安全方案,帮助读者全面掌握Set的应用与选择策略。
1485 23
|
安全 Java API
Java SE 与 Java EE 区别解析及应用场景对比
在Java编程世界中,Java SE(Java Standard Edition)和Java EE(Java Enterprise Edition)是两个重要的平台版本,它们各自有着独特的定位和应用场景。理解它们之间的差异,对于开发者选择合适的技术栈进行项目开发至关重要。
1756 1
|
算法 Java
50道java基础面试题
50道java基础面试题
|
存储 Java 程序员
Java面试题日积月累(数据库30道)
Java面试题日积月累(数据库30道)
318 0
|
消息中间件 缓存 Java
Java 最常见的面试题:怎么保证缓存和数据库数据的一致性?
Java 最常见的面试题:怎么保证缓存和数据库数据的一致性?
|
SQL 关系型数据库 MySQL
Java面试题 -数据库
Java面试题 -数据库
282 0