Java中接口和抽象类之间的区别

抽象类
使用了关键词abstract声明的类叫作“抽象类”。如果一个类里包含了一个或多个抽象方法,类就必须指定成abstract(抽象)。“抽象方法”,属于一种不完整的方法,只含有一个声明,没有方法主体也就是没有{},抽象类不能被实例化(也就是不能用抽象类new)。
接口
接口是一系列方法的声明,是一些方法特征的集合,接口里面只有方法的声明而没有方法的实现,也就是没有方法主体,没有{},里面的方法都是由public abstract修饰的。
区别
1.抽象类可以有具体的方法实现,而接口是完全抽象的,不能有方法实现。
2.子类使用extends继承抽象类,如果子类不是抽象类的话,要实现抽象类的全部抽象方法。子类使用implements实现接口,并且要实现接口声明的全部方法。
3.修饰符:抽象类可以用public protected和default这些修饰符,接口方法默认修饰符是public,不可以用其他修饰符。
4.抽象类可以有main方法也可以运行,接口不能有main,也不能运行。
5.抽象类可以继承一个类和实现多个接口,接口只可以继承一个或多个其它接口。
6.抽象类比接口速度要快,因为接口需要时间去寻找在类中实现的方法。
7.往抽象类中添加新的方法可以直接提供实现,所以可以不用改变继承抽象类的子类,而向接口添加新的方法,必须改变接口的实现类。
8.抽象类可以有构造方法,只是不能创建抽象类的实例化对象,接口没有构造方法,不能被实例化。
什么时候使用抽象类?什么时候使用接口?
1.如果拥有一些方法并且想让它们中的一些有默认实现,用抽象类。
2.由于Java不支持多继承,子类不能够继承多个类,但可以实现多个接口。这时候可以使用接口解决问题。
3.如果基本功能在不断改变,那么就需要使用抽象类。如果不断改变基本功能并且使用接口,那么就需要改变所有实现了该接口的类。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java 接口(Interface)和抽象类(Abstract Class)都是用来实现面向对象设计抽象概念的重要工具,它们之间有一些关键区别: 1. **定义**: - **接口**:只包含常量(静态 final 属性)和抽象方法(没有方法体,只有方法签名)。接口用于定义行为规范,不允许有实例化代码。 - **抽象类**:可以包含常量、变量、抽象方法(没有方法体)以及非抽象方法(有方法体)。抽象类可以被继承,并且可以提供一些默认实现。 2. **实现方式**: - **接口继承**:接口只能单继承,一个类可以同时实现多个接口。通过关键字 `implements` 实现接口。 - **抽象类继承**:一个类可以仅从一个抽象类继承,但可以实现多个接口。通常情况下,如果一个类只想共享部分代码,可以选择抽象类;如果是为了定义行为规范,接口更为合适。 3. **方法可见性**: - **接口方法**:所有方法默认为 public,无需显式声明访问修饰符。 - **抽象类方法**:抽象方法默认也是 public,但非抽象方法可以根据实际需求选择访问修饰符。 4. **构造器**: - **接口**:接口不允许有构造器,因为接口本身不表示具体的实体。 - **抽象类**:可以有构造器,用于子类初始化或执行特定操作。 5. **实例化**: - **接口**:不能创建接口的实例,主要用于类型安全和定义行为规范。 - **抽象类**:虽然可以抽象,但通常会有非抽象的构造方法用于创建实例。 6. **多态性**: - **接口多态**:通过实现接口来达到多态,接口方法的调用取决于实际引用的接口实现。 - **抽象类多态**:当一个子类同时继承了抽象类和实现了接口时,可能会涉及接口多态和抽象方法的重写。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值