java接口和抽象类的区别

1、抽象类
在Java中,被关键字abstract修饰的类称为抽象类;被abstract修饰的方法称为抽象方法,抽象方法只有方法声明没有方法体。
抽象类有以下几个特点:
1、抽象类不能被实例化,只能被继承。
2、包含抽象方法的类一定是抽象类,但抽象类不一定包含抽象方法(抽象类可以包含普通方法)。
3、抽象方法的权限修饰符只能为public或者protected,默认情况下为public。
4、一个类继承于一个抽象类,则子类必须实现抽象类的抽象方法,如果子类没有实现父类的抽象方法,那子类必须定义为抽象类。
5、抽象类可以包含属性、方法、构造方法,但构造方法不能用来实例化对象,只能被子类调用。
2、接口
接口可以看成是一种特殊的类,只能用interface关键字修饰。接口是提供给别人调用的。Java中的接口具有以下几个特点:
1、接口中可以包含变量和方法,变量被隐式指定为public static final,方法被隐式指定为public abstract(JDK 1.8之前);
2、接口支持多继承,即一个接口可以继承(extends)多个接口,间接解决了Java中类不能多继承的问题;
3、一个类可以同时实现多个接口,一个类实现某个接口则必须实现该接口中的抽象方法,否则该类必须被定义为抽象类;
4、JDK 1.8中对接口新增了两个特性:
(1)默认方法(default method):JDK 1.8允许给接口添加非抽象的方法实现,但必须使用default关键字修饰;定义了default的方法可以不被实现子类所实现,但只能被实现子类的对象调用;如果子类实现了多个接口,并且这些接口包含一样的默认方法,则子类必须重写默认方法。
(2)静态方法(static method):JDK 1.8中允许使用static关键字修饰一个方法,并提供实现,称为接口静态方法。接口静态方法只能通过接口调用(接口名.静态方法名)。
5、在JDK 1.9中,再次对接口进行了增强,可以实现private method和private static method。因为JDK 1.8中可以对接口中的方法进行实现,那么当我们不希望实现的方法暴露给外部时,则可以将方法定义为private。
3、接口与抽象类的区别
1、抽象类中可以包含普通方法,但接口中只能包含public abstract方法(JDK 1.8之前);
2、抽象类中的成员变量没有访问权限的限制,但接口中的变量只能被public static final修饰;
3、一个接口可以继承多个接口,但一个类只能有一个父类,类可以实现多个接口;
4、抽象类是对一类事物的抽象,接口则是对行为的抽象。一个类继承一个抽象类代表“是不是”的关系,而一个类实现一个接口则表示“有没有”的关系。
在这里插入图片描述
abstract关键字用于创建抽象类,它也可以与方法一起使用,而interface关键字用于创建接口,不能与方法一起使用。
子类使用extends关键字来扩展抽象类,它们需要提供抽象类中所有声明的方法的实现,除非子类也是一个抽象类而不需要实现。而子类使用implements关键字来实现接口,并且应该为所有声明的方法提供实现。
抽象类可以具有实现的方法,而接口提供绝对抽象,并且不能具有任何方法实现。请注意,从Java 8开始,可以在包含方法实现的接口中创建默认和静态方法。
抽象类可以有构造函数,但接口不能有构造函数。
抽象类具有普通java类的所有功能,除了无法实例化它。可以使用abstract关键字来创建类抽象,但接口是完全不同的类型,并且只能有公共静态最终常量和方法声明。
抽象类方法可以具有访问修饰符作为:public,private,protected,static但是接口方法是隐式公共和抽象的,我们不能使用任何其他访问修饰符和接口方法。
子类只能扩展一个抽象类,但可以实现多个接口。
抽象类可以扩展其他类并实现接口,但接口只能扩展其他接口。
如果它有main()方法,可以运行一个抽象类。但是不能运行接口,因为接口不能有main方法实现。
接口用于定义子类的契约,而抽象类也定义契约,但它可以为子类提供其他方法实现。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值