抽象类与接口的区别

http://blog.sina.com.cn/s/blog_640738130100tshn.html

抽象类就是将类似或相似的部分给抽取出来,这句话看上去很搞笑,其实它说出了抽象类的真理。你可能会说”我不是可以重写一个公共类,然后我实例化这个公共类,调用相同的方法就可以了”,这里是可以,实际上抽象类的工作也就是这个,不过他省去了你实例化的这个步骤,并且你还可以生载这个方法

 

抽象类特性:

1.  非抽象子类必须完全实现这个抽象中所有的抽象方法

2.  抽象类不能被实例化,它的意义在于被扩展。访问方式TestClass::test(‘我是抽象方法’);

3.  抽象类通常(也可以没有)至少有1个抽象方法,抽象方法中没有大括号。非抽象方法是有的

4.  抽象方法不必实现具体的功能,子类来完成

5.  在子类实现抽象类的方法时,其子类的可见性必须大于或等于抽象方法的定义

6.  抽象类的方法可以有参数,也可以为空

7.如果抽象方法有参数,那么子类的实现也必须有相同的参数个数

 

他们的不同点:

1.抽象类中可以有非抽象的方法接口中只能够有抽象的方法!

2.一个子类可以继承多个接口一个类只能继承一个抽象类

3.接口的使用方式通过implements关键字进行,抽象类则是通过继承extends关键字进行!

4.在声明上

接口只能声明抽象方法(包括静态抽象方法)和静态变量.抽象类除了包含一般类的特点,即包括属性和一般方法外,还可以声明抽象方法(包括静态抽象方法).

 

5.在写法上

一、接口的抽象方法前不用也不能abstract关键字,默认隐式就是抽象方法,也不能final关键字来防止抽象方法的继承.抽象类中抽象方法前则必须加上abstract表示显示声明为抽象方法.

 

二、接口的抽象方法默认public的,也只能public的,privateprotected修饰符修饰.抽象类可以

 

6. 一个非抽象类如果extends一个抽象类后只需(并且必需)所有的实现抽象方法就行了,非抽象方法可以不实现。如果implements一个接口,就必须实现接口中的所有方法(因为接口中的方法均为抽象方法);

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值