永发信息网

抽象类和接口的区别、为什么用抽象类。

答案:3  悬赏:60  手机版
解决时间 2021-04-06 03:01
抽象类和接口的区别、为什么用抽象类。
最佳答案
区别:
1.abstract class 在 Java 语言中表示的是一种继承关系,一个类只能使用一次继承关系。但是,一个类却可以实现多个interface。

2.在abstract
class
中可以有自己的数据成员,也可以有非abstarct的成员方法,而在interface中,只能够有静态的不能被修改的数据成员(也就是必须是
static final的,不过在 interface中一般不定义数据成员),所有的成员方法都是abstract的。

3.abstract class和interface所反映出的设计理念不同。其实abstract class表示的是"is-a"关系,interface表示的是"like-a"关系。

4.实现抽象类和接口的类必须实现其中的所有方法。抽象类中可以有非抽象方法。接口中则不能有实现方法。

5.接口中定义的变量默认是public static final 型,且必须给其初值,所以实现类中不能重新定义,也不能改变其值。

6.抽象类中的变量默认是 friendly 型,其值可以在子类中重新定义,也可以重新赋值。

接口中的方法默认都是 public,abstract 类型的。

抽象类出现在接口中,接口主要就是为了实现多次复用,也就是说可以被不同的子类实现这些接口,来根据实际需要来重写接口方法,以达到特定的目的。
全部回答
答得稀烂。。。网上再学习了一次,在这里记下看到各位大虾的金言。一、抽象类:在面向对象领域,抽象类主要用来进行类型隐藏。那什么是类型隐藏呢?我们可以构造出一个固定的一组行为的抽象描述,但是这组行为却能够有任意个可能的具体实现方式。这个抽象描述就是抽象类,而这一组任意个可能的具体实现则表现为所有可能的派生类。好比,动物是一个抽象类,人、猴子、老虎就是具体实现的派生类,我们就可以用动物类型来隐藏人、猴子和老虎的类型。( 参考doSome方法)二、接口:三、抽象类和接口的区别:首先,抽象类在Java语言中表示的是一种继承关系,一个类只能使用一次继承关系。但是,一个类却可以实现多个接口。也许,这是Java语言的设计者在考虑Java对于多重继承的支持方面的一种折中考虑吧。 其次,在抽象类的定义中,我们可以赋予方法的默认行为。但是在接口的定义中,方法却不能拥有默认行为,为了绕过这个限制,必须使用委托,但是这会 增加一些复杂性,有时会造成很大的麻烦。 抽象类在Java语言中体现了一种继承关系,要想使得继承关系合理,父类和派生类之间必须存在”is a”关系,即父类和派生类在概念本质上应该是相同的。对于接口来说则不然,并不要求接口的实现者和接口定义在概念本质上是一致的,仅仅是实现了接口定义的契约而已。接口表示的是”likea”关系。 使用抽象类来定义允许多个实现的类型,比使用接口有一个明显的优势:抽象类的演化比接口的演化要容易的多。在后续的发行版中,如果希望在抽象类中增加一个方法,只增加一个默认的合理的实现即可,抽象类的所有实现都自动提供了这个新的方法。对于接口,这是行不通的。虽然可以在骨架实现类中增加一方法的实现来解决部分问题,但这不能解决不从骨架实现类继承的接口实现的问题。由此,设计公有的接口要非常谨慎,一旦一个接口被公开且被广泛实现,对它进行修改将是不可能的。 所以,使用接口还是抽象类,取决于我们对问题的概念的本质理解和设计的意图。Java接口与抽象类的相同点:1. 都不能被实例化。2. 都能包含抽象方法。抽象类与接口紧密相关。然接口又比抽象类更抽象,这主要体现在它们的差别上:1)类可以实现无限个接口,但仅能从一个抽象(或任何其他类型)类继承,从抽象类派生的类仍可实现接口,从而得出接口是用来解决多重继承问题的。2)抽象类当中可以存在非抽象的方法,可接口不能且它里面的方法只是一个声名必须用public来修饰没有具体实现的方法。3)抽象类中的成员变量可以被不同的修饰符来修饰,可接口中的成员变量默认的都是静态常量(static fainl)。4)这一点也是最重要的一点本质的一点抽象类是对象的抽象,然接口是一种行为规范。例如每个接口可以代表一种最顶层的抽象,可以理解为代表一类东西,如果一个类实现了多个接口,那这个类就有了多种类型,即接口是定义混合类型的理想工具最后:有一种设计模式,就是,默认适配模式,意思就是说,首先定义一个接口,通过抽象类实现这个接口,并实现一些子类不需要一定实现的方法,然后,子类就可以选择是继承接口,实现所有方法,还是直接继承这个抽象类实现具体需要的方法,定义成抽象类是为了以后要其子类来继承的,因为父类里有很多方法是无法定义具体的实现的,只能定义一个原型,让子类来分别实现!所以要定义成抽象的!简单来说就是抽象类是在接口和实体类之间的一个桥梁例如做一个接口叫做飞行FlyAnimalAction,里面定义一个方法叫做flying,再定义一个方法叫做eat做一个类叫做蚊子实现接口,蚊子要实现flying方法,实现自己的eat方法做一个类叫做苍蝇实现接口,苍蝇也要实现flying方法,实现自己的eat方法你发现所有会飞的动物都要实现这个接口,很麻烦,不如做一个抽象类FlyAnimal,然后实现上面的接口在里面实现flying这个方法,因为大部分的飞行动作是一样的,而eat方法则继续写成抽象方法,因为大部分的动物吃东西是不一样的下面你再写蚊子类就简单了,可以直接继承这个抽象类,然后实现自己的吃方法就行了而且苍蝇类的制作也是一样,这个时候抽象类的功能就显示出来了,当然抽象类的功能远远不是这些,只是初期理解到这里就够了。
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
主持人齐思钧水立方穿的毛衣什么的
大连市内南关岭街道算事业单位吗?
单选题某温度下某物质的溶解度为10g,在此温
描写天气气候的诗句,描写天气和气候的诗句,
有一部小说开头是主角表白失败骂老天被雷劈了
4o岁的女人冬天热出汉这是怎么了
缅怀故人的诗句一程,论语中悼念失去亲人的句
联想h5000我想加个独立显卡但是电源不行能加
店里进出货物怎么记账?
单选题下列句子中有错别字的一项是A.吴儿善泅
对销售有关的名句大全,有关感人的句子
ros 5.5 img怎么安装
男朋友送我玉镯是什么含义
如图,已知AB=AD,要说明△ABC≌△ADE则需加
突然不想和最好的朋友说话是怎么回事
推荐资讯
需要一份垃圾中转站的电气CAD,注意一定是电
朗逸遥控钥匙突然不能遥控开车门,但可以锁门
宝居乐家具的介绍
(10分之9乘8分之七乖六分之十三)一除(三分之
6万元买什么二手车好
小唐,昨晚气候宜人,睡得还可以,我已起床。
读A、B两地气温曲线与降水柱状图,完成下列各
画插画用什么手绘板,手绘插画是用什么笔画的
为什么我开机的时候系统报错说显卡驱动停止响
钴(Co)的氧化物是一种重要的化工原料,工业
http://v.youku.com/v_show/id_XNzE2MjA5NjA0
廊坊至鹤壁多少公里
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?