什么是接口(Interface)?它和抽象类(Abstract Class)有什么不同?

在Java中,接口(Interface)是一种完全抽象的类,它是由一组抽象方法组成的,这些方法是用来指定一组行为,接口不包含构造方法,并且不能实例化。从Java 8开始,接口还可以包含默认(default)和静态(static)方法,带有方法体的实现。

接口的特点:

  • 接口中的所有方法默认都是publicabstract的,但在声明时不需要显式地指定这些修饰符。
  • 接口可以包含常量,这些常量默认都是public, static, 和 final的。
  • 从Java 8开始,接口中可以有default方法,允许有方法体,这是一种实现方法的继承机制。
  • 从Java 8开始,接口中还可以定义静态方法。
  • 从Java 9开始,接口还可以包含私有方法和私有静态方法,但这些方法不能被接口的实现类或其他接口继承。
  • 接口支持多继承,一个接口可以继承多个其他接口。

示例:

public interface Animal {
    // 抽象方法
    public void eat();

    // 默认方法
    default void sleep() {
        System.out.println("This animal sleeps.");
    }
    
    // 静态方法
    static void breathe() {
        System.out.println("Breathing...");
    }
}

抽象类(Abstract Class) 是不能实例化的类,它可以包含抽象方法(没有方法体)和具体方法(有方法体)。抽象类用来提供一个基类的实现,供子类实现或继承。

抽象类的特点:

  • 抽象类可以有构造器,即使不能直接实例化,这个构造器可以被子类的构造器调用。
  • 抽象类可以有成员变量,可以是非常量。
  • 抽象类中可以有非抽象的普通方法,即具体方法。
  • 抽象类不支持多重继承。

示例:

public abstract class Animal {
    // 抽象方法
    public abstract void eat();

    // 具体方法
    public void sleep() {
        System.out.println("This animal sleeps.");
    }
}

接口与抽象类的区别:

  • 目的: 接口主要用于定义公共的行为协议,而抽象类则是共享公共代码以及定义子类的通用模板。
  • 实现多态:通过接口,可以实现多继承,一个类可以实现多个接口;而一个类只能继承一个抽象类。
  • 默认方法实现:接口可以有默认方法实现,允许添加新方法而不影响实现接口的类;抽象类中方法可以有实现,也可以没有。
  • 访问类型:接口预设的方法是public的;抽象类中的方法可以是publicprotectedprivate
  • 成员变量: 接口只能有常量;抽象类可以有成员变量,可以是非常量。
  • 构造方法:接口没有构造方法;抽象类可以有构造方法。

在使用上,一般情况下,如果你想定义一组应该被多个不相关的类实现的类型,使用接口。如果你想共享代码的实现,使用抽象类。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

java奋斗者

听说打赏我的人再也不会有BUG

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

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

打赏作者

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

抵扣说明:

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

余额充值