抽象类的特点是什么?接口的特点是什么?它们之间的区别是什么?

抽象类的特点是什么?接口的特点是什么?它们之间的区别是什么?
抽象类的特征:抽象类不能实例化;不能用 sealed 修饰符修饰抽象类,因为这两个修饰符的含义是相反的;采用 sealed 修饰符的类无法继承,而 abstract 修饰符要求对类进行继承;从抽象类派生的非抽象类必须包括继承的所有抽象方法和抽象访问器的实际实现。
接口的特点:不能被实例化,存在的意义就是被用来继承。
区别:
(1) 接口是公开(public)的,里面不能由私有的方法或变量,它是用于让别人使用的。实现接口的类,一定要实现接口中定义的所有方法。而抽象类是可以由私有方法或私有变量的,实现抽象类可以有选择地重新写需要用到的方法,但是必须实现里面所有的抽象方法。
(2) 抽象类在Java语言中表示的是一种继承关系,一个类只能使用一次继承关系。但是,一个类却可以实现多个接口(这是Java中实现多重继承的方法之一)。
(3) 抽象类中可以有自己的数据成员,也可以有非abstract的成员方法。而在接口中,只能够有静态的、不能被修改的数据成员(也就是必须是static final的,不过在interface中一般不定义数据成员),而且所有的成员方法都是抽象的。
(4) 抽象类的接口所反映出的设计理念不同。其实abstract class表示的是“is-a”关系,inteface表示的是“like-a”关系。(组合是“has a”关系)
(5) 接口中定义的变量默认是public static final型,且必须给其初值,所以实现类中不能重新定义,也不能改变其值。抽象类中的变量默认是friendly型,其值可以在子类中重新定义,也可以重新赋值。
(6) Java抽象类可以提高某些方法的部分实现,而Java接口不可以,这大概就是Java抽象类唯一的优点,但这个优点非常有用。
(7) 一个抽象类的实现只能由这个抽象类的子类给出,也就是说,这个实现在抽象类所定义出的继承的等级结构中,而由于Java语言的单继承性,所以抽象类作为类型定义工具的效能大打折扣。在这一点上,Java接口的优势就出来了,任何一个实现了一个Java接口所规定的方法的类,都可以具有这个接口的类型,而一个类可以实现任意多个Java接口,从而这个类就有了多种类型。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值