【面试篇】Java中接口和抽象类的区别是什么?

本文详细阐述了Java中接口和抽象类的概念、格式及应用要点,并对比了两者的区别,帮助读者理解如何选择合适的设计模式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

每天进步一点点!
在这里插入图片描述

Java中接口和抽象类?

Java中一个类只能继承一个抽象类,但是可以实现多个接口

a.什么是接口

接口就是比“抽象类"还“抽象”的“抽象类”, 可以更加规范的对子类进行约束。全面地专业地实现了:规范和具体实现的分离。接口是完全面向规范的,规定了-批类具有的公共方法规范。

  • 从接口的实现者角度看,接口定义了可以向外部提供的服务。
  • 从接口的调用者角度看,接口定义了实现者能提供那些服务

接口就是一种契约,协议。

b.格式

[访问修饰符号] interface 接口name [extends 父接口1,父接口2] {
	常量定义:
	方法定义:
}

c.要点

1、访问修饰符:只能是public 或者默认
2、extends:接口支持多继承
3、接口中的属性只能是常量,默认就是public static finnal
4、接口中的方法默认是public abstract

JDK1.8中对接口增加了新的特性:(1)、默认方法(default method):JDK 1.8允许给接口添加非抽象的方法实现,但必须使用default关键字修饰;定义了default的方法可以不被实现子类所实现,但只能被实现子类的对象调用;如果子类实现了多个接口,并且这些接口包含一样的默认方法,则子类必须重写默认方法;(2)、静态方法(static method):JDK 1.8中允许使用static关键字修饰一个方法,并提供实现,称为接口静态方法。接口静态方法只能通过接口调用(接口名.静态方法名)。


d.接口和抽象类的区别

// 抽象类
public abstract class Person{
    public abstract void say();
    public void eat(){};
}
// 接口
public interface Person{
    public static final int a=10;
    //JDK1.8
    default void sayHello(){
        System.out.println("Hello World");
    }
    public static void sayJava(){
        System.out.println("Hello Java");
    }
    public void say();
}
  • 相同点
    • 接口和抽象类都不能被实例化;
    • 抽象类的子类或接口的实现类都实现了抽象类或接口的方法后才能被实例化;
  • 不同点
接口抽象类
接口中没有构造函数抽象类中可以有构造函数
接口中没有代码的实现(在Java1.8中可以用default或static来实现方法),即默认方法隐式为public abstract,抽象方法抽象类可以由普通成员方法,且方法修饰符可以由publicprotecteddefault,可以包含抽象和非抽象的方法。
接口中的属性只能是常量,即public static final抽象类可以不包含非final的变量,默认为default
接口可以多继承extends多个接口抽象类只能单继承

总之,接口强调特定功能的实现;而抽象类则强调所属关系。

抽象类中可以包含抽象方法和非抽象方法,并不是很严格;

而接口中只包含抽象方法(在jdk1.8之前,jdk1.8可用default或static来实现非抽象的方法),严格;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

mind_programmonkey

你的鼓励是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值