java抽象类与接口的异同点

一、接口

1.概念

        接口(Interface),在JAVA编程语言中是一个抽象类型,是抽象方法的集合。接口通常以interface来声明。一个类通过继承接口的方式,从而来继承接口的抽象方法。

        如果一个类只由抽象方法和全局常量组成,那么这种情况下不会将其定义为一个抽象类。只会定义为一个接口,所以接口严格的来讲属于一个特殊的类,而这个类里面只有抽象方法和全局常量,就连构造方法也没有。

        接口是解决Java无法使用多继承的一种手段,但是接口在实际中更多的作用是制定标准的。

2.接口的特点

        就像一个类一样,一个接口也能够拥有方法和属性,但是在接口中声明的方法默认是抽象的。(即只有方法标识符,而没有方法体)。

        接口指明了一个类必须要做什么和不能做什么,相当于类的蓝图,给其它类提供行为说明。
一个接口就是描述一种能力,比如“运动员”也可以作为一个接口,并且任何实现“运动员”接口的类都必须有能力实现奔跑这个动作(或者implement move()方法),所以接口的作用就是告诉类,你要实现我这种接口代表的功能,你就必须实现某些方法,我才能承认你确实拥有该接口代表的某种能力。
        如果一个类实现了一个接口中要求的所有的方法,然而没有提供方法体而仅仅只有方法标识,那么这个类一定是一个抽象类。(必须记住:抽象方法只能存在于抽象类或者接口中,但抽象类中却能存在非抽象方法,即有方法体的方法。接口是百分之百的抽象类。)接口不能被实例化,而且在接口中所列的所有方法必须在别处被重写。
一个JAVA库中接口的例子是:Comparator 接口,这个接口代表了“能够进行比较”这种能力,任何类只要实现了这个Comparator接口的话,这个类也具备了“比较”这种能力,那么就可以用来进行排序操作了。

        一个接口看起来就像一个类,除了:

       关键字interface替换了关键字class, 以及接口中的方法只有方法头加分号结尾,没有方法主主体。

3.接口的使用

(1)格式

public interface 接口名称

{

(方法头。。。)

}

接口中的所有方法都是public ,抽象方法。

一个类可以实现一个或者多个接口。

(2)属性

一个接口可以有属性 :
–在接口中的所有属性都为 public、final 和 static.
因为他们会自动地变为 final , 所以你必须为它们提供初始化值。

public interface Doable

{

  int FIELD1 = 1, FIELD2 = 2;

  (Method headers...)

}

在这个接口中 , FIELD1 FIELD2 public final static int 变量。
任何实现这个接口的类都可以访问这些变量。
一个类 只能从 一个基类派生。
Java 允许一个类实现多个接口。
当一个类实现多个接口,它必须实现所有接口中的方法。
为了在类定义中说明实现多个接口,需要写上关键字implements ,并列出接口的名字,接口名之间用逗号分隔。
public class MyClass implements Interface1,

                                         Interface2,

                                         Interface3

(3)继承接口

与类的继承类似,接口之间也可以继承。

接口只能继承接口,而不能继承类。

与类的继承类似,接口的继承也表达了“is-a”的逻辑。

与类只能继承一个父类不同,接口可以继承多个父接口,彼此以逗号隔开(各父接口的顺序可任意),表达的逻辑是子接口既是一种父接口1,也是一种父接口2

二、抽象类

1.概念

        Java中可以定义没有方法体的方法,该方法由其子类来具体的实现。该没有方法体的方法我们称之 为抽象方法,含有抽象方法的类我们称之为抽象类。
抽象类可以理解为是一个只有方法声明没有方法体的特殊类。

2.使用相关

包含抽象方法的类就会自动变成抽象类,因此必须以abstract关键字声明。

如果派生类没有重写抽象方法,编译器会报错。

抽象方法被用来确保派生类会实现这个方法。

实例:Geometry.java, Circle.java, Rectangle.java GeometryObjectDemo.java​​​​​CompSciStudentDemo.java若类含有抽象方法,则类必须以abstract关键字声明为抽象类

public abstract class 类名

抽象类可以含零至多个普通方法,也可以含零至多个抽象方法。

不论抽象类是否含抽象方法,其都不允许实例化,即不能创建抽象类的对象,因为其描述的是抽象概念。它只能作为其他类的基类。

若父类是抽象类,且子类不想成为抽象类,则子类必须将父类中的所有抽象方法重写为带方法体的普通方法,否则子类仍必须是抽象类。

3.实例

 

 

 

 

三、比较

        接口是对动作的抽象,抽象类是对本质的抽象。

1.概念

        抽象类表示的是,这个对象是什么。接口表示的是,这个对象能做什么。比如,男人和女人,他们的抽象类是人类,而猫和狗的抽象类是宠物类。人类可以吃东西,宠物类也可以吃东西,但是两者不能混为一谈,因为有本质的区别。这个“吃东西”是一个动作,你可以把“吃东西”定义成一个接口,然后让两个类去实现它的方法。

        所以,在高级语言上,一个类只能继承一个类或抽象类,正如人不可能同时是动物类又是植物类,但是可以实现多个接口,例如,吃饭接口、呼吸接口等。

2、语法

(1)语法层面

抽象类与接口是Java提供的对现实世界中的实体进行抽象的两种机制,二者具有很大的相似性,同时也具有明显的区别。

3、使用情况

a.抽象类 和 接口 都是用来抽象具体对象的,但是接口的抽象级别最高;

b.抽象类可以有具体的方法和属性,  接口只能有抽象方法和不可变常量(final);

c.抽象类主要用来抽象类别,接口主要用来抽象功能;

d.抽象类中不包含任何实现,派生类必须覆盖它们。接口中所有方法都必须是未实现的;

e.抽象类实现接口时,接口的方法在抽象类中可以被实现也可以不被实现,而普通实现接口必须实现所有接口方法。

4、使用方向

当你关注一个事物的本质的时候,用抽象类;
当你关注一个操作的时候,用接口。
 

四、小结
 

        抽象类的功能要远超过接口,但是,定义抽象类的代价高。因为高级语言来说(从实际设计上来说也是)每个类只能继承一个类。在这个类中,你必须继承或编写出其所有子类的所有共性。虽然接口在功能上会弱化许多,但是它只是针对一个动作的描述。而且你可以在一个类中同时实现多个接口。在设计阶段会降低难度的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
抽象类接口在C#有以下异同相同点: 1. 都不能被实例化,只能通过实现它们的子类或实现类来创建对象。 2. 子类或实现类必须实现抽象类接口的所有方法才能被实例化。 3. 可以被其他类继承或实现。 异同: 1. 抽象类是特殊的类,可以包含成员变量、方法、属性等,而接口只能包含方法、属性、事件和索引器的声明。 2. 一个类只能继承一个抽象类,但可以实现多个接口。 3. 抽象类可以有方法的实现,而接口只能有方法的声明。 4. 抽象类可以有字段和构造函数,而接口不能有字段和构造函数。 5. 接口可以被其他接口继承,形成接口的继承链,而抽象类不能被继承。 总结来说,抽象类更适合用于定义一些具有共同特征的类的基类,而接口更适合用于定义一些行为的规范,使得不同的类可以实现这些规范。 #### 引用[.reference_title] - *1* [Java抽象类接口异同](https://blog.csdn.net/m0_64742984/article/details/124610167)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [C# 抽象类接口异同](https://blog.csdn.net/Monkey_Xuan/article/details/115915086)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值