abstract class和interface有什么区别

本文详细解释了Java中抽象类和接口的概念与区别,包括它们的定义方式、使用场景及限制条件。阐述了抽象类与接口如何支持多态性和代码复用,帮助读者更好地理解面向对象编程原则。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类。正是因为抽象的概念在问题领域没有对应的具体概念,所以用以表征抽象概念的抽象类是不能够实例化的。
abstract classinterfaceJava语言中对于抽象类定义进行支持的两种机制,正是由于这两种机制的存在,才赋予了Java强大的面向对象能力。
  声明了方法的存在而不去实现它的类被叫做抽象类(abstract class),它用于要创建一个体现某些基本行为的类,并为该类声明方法,但不能在该类中实现该类的情况。不能创建abstract 类的实例。然而可以创建一个变量,其类型是一个抽象类,并让它指向具体子类的一个实例。不能有抽象构造函数或抽象静态方法,但可以有具体实现的方法,抽象类里没有具体实现的方法必须指定为抽象类型,否则会出错的。抽象方法不能有方法体。

再次强调:一个类不能既被声明为 abstract的,又被声明为final的。
  
接口(interface)是抽象类的变体,只可以定义不能实现。在接口中,所有方法都是抽象的(即接口的方法都没方法体)多继承性可通过实现这样的接口而获得。接口只可以定义static final成员变量。接口的实现与继承相似,除了该实现类不能从接口定义中继承行为。当类实现接口时,它必须定义或实现(即将程序体给予)所有这种接口的方法。然后,它可以在实现了该接口的类的任何对象上调用接口的方法。由于是抽象类,它允许使用接口名作为引用变量的类型。通常的动态联编将生效。引用可以转换到接口类型或从接口类型转换,instanceof 运算符可以用来决定某对象的类是否实现了接口。

从某种意义上说,interface是一种特殊形式的abstract class,也不能使用final修饰符

abstract classJava语言中表示的是一种继承关系,一个类只能使用一次继承关系。但是,一个类却可以实现多个interface

一个非抽象(注意是非抽象类!)实现一个接口时,必须实现接口的所有方法,抽象类则不必实现所有方法。

一个Interface的方所有法访问权限(visibility)自动被声明为public,确却的说,一个Interface的所有方法只能是public的,你可以显式声明一个方法是public(不推荐),但是不能声明它是privateprotected.但是当一个类实现某个接口,定义接口的方法时,必须且只能声明为public,否则编译将通不过。 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值