接口与抽象类的对比

接口与抽象类的对比

定义:

        抽象类:无法具体描述事物时,使用抽象类。

     接口:扩展功能。

定义格式:

抽象类:abstract class  类名A{}

接口:interface 接口名B{}

使用场景:

抽象类:主要用来抽象类别。

接口:主要用来抽象功能。

比如:子类除了需要重写父类的abstract方法,还需要从父类继承一些变量或继承一些重要的非abstract方法,就可以考虑用abstract类。如果某个问题不需要继承,只是需要若干个类给出某些重要的abstract方法的实现细节,就可以考虑使用接口。

继承:

抽象类:是单一继承的,不能继承多个类,但父类可以有祖先类。

接口:可以同时实现多个接口(多重继承)。

实例化:

抽象类:不能实例化(因为抽象的东西不能具体描述)。

接口:不能实例化(因为接口中方法本身都是抽象的,接口本身也是抽象的)。

实现方式:

抽象类:需要被子类继承。

接口:需要被类实现。

方法的实现:

抽象类:方法有抽象方法和非抽象方法,即可以有具体的方法实现,也可以没有具体的方法。可以对方法声明,也可以实现方法。

接口:都是抽象方法,只能做方法的声明,不能实现方法。

方法:

抽象方法:没有方法体,以分号结束。

抽象类:如果是含有抽象方法,那么子类在继承时需要重写父类中的所有抽象方法,或者子类必须也得是抽象类。(因为抽象类就是用来继承的,子类在继承时把父类的抽象方法继承过来了,那么子类就必须是抽象方法,如果子类不想定义为抽象方法,那么子类就不能出现抽象方法,所以需要重写父类中的抽象方法。) 父类中如果有static方法,子类必须用static方法覆盖。

接口:接口中的所有方法都是抽象的,因为接口中的方法系统默认是public  abstract所以,在实现接口时,子类必须对接口中的所有方法进行重写。如果某一个子类只用到接口中的个别方法,那么对其他方法必须也得重写,只是他们的方法体为空。在方法重写时,由于接口的方法访问修饰符是public,而方法重写要求子类的访问权限不能父类的访问权限,所以子类的访问修饰符不能省略(省略的时候修饰符默认是友好的,访问权限低于public)。

构造方法: 

抽象类:有构造方法。因为子类在创建对象初始化时,由于子类继承父类,需要先对父类进行初始化。

接口:无构造方法。因为在接口中的成员变量是系统默认添加修饰符:public  final  static,有final的存在,变量不能做修改,所以就变成了成员常量。既然没有成员变量了,那么就不需要初始化,所以也用不到构造方法。因为构造方法就是用来初始化的。

成员变量:

抽象类:有。

接口:无。因为成员变量系统默认的修饰符是final,所以就成了常量。

成员常量:

抽象类:有。

接口:有。(final修饰了)

修饰符:

抽象类:抽象方法不能用private、final来修饰,因为这两个次修饰之后就不能被子类继承了,就更不能被重写了。

接口:方法默认修饰符:public、static。属性默认修饰符:public、static、final

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

QYHuiiQ

听说打赏的人工资翻倍~

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

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

打赏作者

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

抵扣说明:

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

余额充值