Java中抽象类和接口区别

本文介绍了Java中抽象类的单继承特性、访问修饰符和抽象方法,以及接口的多继承、默认方法、静态方法和JDK1.8的新特性。通过实例展示了如何创建接口、实现类并调用接口中的不同功能。

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

1、抽象类:

  • 只支持单继承;

  • 类访问修饰符public,不能使用其他修饰符;

  • 抽象类不允许被实例化,只能被继承,不可以new出来;

  • 抽象类可以包含变量和方法。方法可以是普通方法也可以是抽象方法;

  • 包含抽象方法的一定是抽象类,但是抽象类不一定含有抽象方法;

  • 抽象类中的抽象方法的修饰符只能为public或者protected,缺省情况下默认为public;

  • 类继承抽象类,必须实现抽象类中的所有抽象方法。如果子类没有实现父类的抽象方法,则必须将子类也定义为abstract类。

  • 抽象类可以包含构造方法,但是构造方法不能用于实例化,主要用途是被子类调用。

2、接口:

  • 支持多继承;

  • 接口默认是public,不能使用其他修饰符;

  • 类实现接口的时候,必须实现接口中声明的所有方法;

  • 接口可以包含变量、方法,变量被隐士指定为public static final,方法被隐士指定为public abstract(JDK1.8之前);

  • JDK1.8中接口中可以定义静态方法、default方法,枚举类型,接口中还可以定义接口(嵌套)。

JDK1.8中对接口增加了新的特性 - 默认方法:JDK 1.8允许给接口添加非抽象的方法实现,但必须使用default关键字修饰;定义了default的方法可以不被实现子类所实现,但只能被实现子类的对象调用;如果子类实现了多个接口,并且这些接口包含一样的默认方法,则子类必须重写默认方法;

JDK1.8中对接口增加了新的特性 - 静态方法:JDK 1.8中允许使用static关键字修饰一个方法,并提供实现,称为接口静态方法。接口静态方法只能通过接口调用(接口名.静态方法名)。

例子:定义接口

public interface IVehicle {
    //枚举类型
    enum Type {
        LOW,
        MEDIUM,
        HIGH
    }
    //嵌套接口
    interface IWheel {
        void run();
    }
    //default方法
    default void init() {
        IVehicle.Type type = IVehicle.Type.LOW;
        System.out.println(type.ordinal());
    }
    //静态方法
    static void printPrice() {
        System.out.println("打印价格!!!");
    }

    void start();
}

接口实现类及调用:

public class Car implements IVehicle{
    @Override
    public void start() {
    }
}

public class Client {
    public static void main(String[] args) {
        Car car = new Car();
        car.init();//调用接口default方法
        car.start();
        IVehicle.printPrice();//调用接口静态方法
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值