抽象类与接口初涉(欢迎大家补充指点)

一、释义

关于定义,网络或者书籍中有相当多的解释和描述,这边只用形象的说法来解释,易于理解最重要。

1、抽象类

简单的说,抽象类就是对对象的抽象,用于进行类型隐藏。如:小狗、小猫都属于宠物,都会叫,要吃和睡。这时,我们要定义类的话:



最原始的方法,就是写两个类。但是很多东西是重复的,暂先不考虑多态的使用。这时,我们把相同的东西做一个抽象,小狗小猫都属于宠物,那么就做一个父类Pet,操作相同则可以抽象出来,操作和内容都相同的部分,则可以在抽象类中定义为一种默认操作:



这样我们的代码更加精简,而且使用起来更加灵活(能够支持多态):


2、接口

接口则是一种行为规范,接口中只包含各种行为的方法声明,而不写具体方法体,各类都需要写自己的方法体,都具有不同的实现。接口是一种特殊形式的抽象类:

二、两者差异比较

他们都是对象的抽象,只不过接口比抽象类更加抽象。

1、相同点

1)都不能被实例化;
2)都能包含抽象方法(接口中的方法都默认是抽象方法,抽象类中则需要声明为抽象方法,两者都只能声明,不能包含方法体);

2、区别

接口:
1)表现一种实现关系(implements),“like a ”,只是一种契约规范;
2)多实现,一个类可以实现多个接口;
3)成员变量默认都是static final的,方法默认都是抽象的(abstract);
4)实现类需要实现接口中的所有方法;

抽象类:
1)表现的是继承关系(extends),“is a”,要求派生类和父类在概念本质上是相同的;
2)单一继承,一个类只能继承一个抽象类(另:接口是可以继承多个类的);
3)成员变量和方法都可以自己声明各自的修饰符;
4)抽象(abstract)方法派生类必须继承,其他方法则可以作为一种默认操作,也可以派生类自己重写父类方法;

三、使用场景差异

通过以上的解释与比对,可以看到:
接口是一种极其抽象的契约规范,大家都可以服从某种规范,但是不一定要全部一样;
抽象类则是类的抽象,可以包含抽象方法声明(子类必须自己写方法体);也可以有具体的方法操作(视为一种默认操作),当然子类可以对此方法进行重写。
也就是说,抽象类更容易被扩展(可以方便的在抽象类中增加默认操作,而不需要修改子类),是类和接口之间的一个桥梁,融合了两者的优点。

另:本文代码之所以均通过截图展示,其一,方便做标识处理;其二,希望大家在学习时,能自己设计相应场景,编写代码,辅助理解。

菜鸟一枚,难免有错,敬请指正,共同进步!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值