接口类和抽象类概念和区别

接口

只能包含常量(final static 变量): 接口中定义的字段默认为 public static final,即常量。
不包含构造方法: 接口中不能包含构造方法,因为接口不能被实例化。
只有抽象方法: 接口中的方法默认为 public abstract,即抽象方法。

为什么接口中不能有变量
如果接口中有变量,而我们让实现接口的类的对象去修改接口的属性值,比如接口中我定义了变量a,而且我们通过实现本接口的类B的对象改变了a的值,那么其他实现本接口的类B、类C中的变量a得知都要随着改变(因为它们实现的都是一个接口,处理的也是同一个变量,而变量的处理方式为传址),那么就会造成想要实现本接口的类却不知道接口里现在变量a到底是什么值,就会造成混乱。
而且,抽象的概念是将不可变的东西提取出来封装到一起,将可变的东西放到实现中去,接口的设计理念既然是高层的抽象,那么就应该定义为不可变的东西,如果接口中定义了变量,就说明带了可变的成分,就不是高层抽象了。

抽象类

抽象类可以包含属性(成员变量),构造方法,方法的具体实现
抽象类的子类分为两种:抽象子类和非抽象子类
抽象子类可以不实现继承的抽象类的所有抽象方法
非抽象子类必须实现继承的抽象类的所有抽象方法。
注:如果抽象类中的方法不是抽象的,那么这些方法已经提供了默认的实现。在这种情况下,子类可以直接继承这些方法,而不需要再次实现。

接口和抽象类的区别

抽象类与接口最大的区别在于抽象类的属性是可以继承的。

抽象类是对类的抽象(是什么),接口是对行为的抽象(做什么)。

抽象类是从子类中发现了公共的东西,泛化出父类,然后子类继承父类,而接口是根本不知道子类的存在,方法如何实现还不确认,预先定义。

抽象类和接口的使用就是is和has的区别。如果就是某种玩意,比如人相对于男人,小孩,女人就是is,那么就应该是抽象类,因为他们都是人,有人所有的特点。而可行动相对于人,汽车,飞机就是has,那么就是接口,因为他们有这样的功能,但不具有is的特征。

接口的使用场景:

当多个类需要共享一组方法签名(方法的声明)时,可以使用接口。接口定义了一种协议,多个类可以按照这个协议实现方法。

如果一个类需要实现多个不相关的接口,而不需要继承共同的实现,接口是更适合的选择。

抽象类的使用场景:

当多个类之间有一些共同的实现,并且这些类之间有明显的层次关系时,可以使用抽象类。抽象类可以提供一些通用的实现,子类可以选择性地覆盖或扩展这些实现。

如果你希望创建一个基本的类,其中包含一些通用的方法,但这个类本身不应该被实例化,那么可以使用抽象类。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值