抽象类abstract class,接口interface

抽象类

1、抽象类一般没有足够的信息来描述一个具体的对象,抽象类只用于继承,不能用于创建对象。
2、一个抽象类一般(不是必须)包括一个或多个抽象方法(只有方法说明,没有方法体)。
3、抽象类的子类必须实现其父类定义的每一个抽象方法,若没有实现父类的所有抽象方法,则该子类也应该定义为抽象类.
抽象类abstract修饰,其格式是:
abstract class 类名
{
类成员定义
}
抽象类包含的方法应该(非必须)有一个是抽象方法。
继承抽象类的非抽象子类必须覆盖父类中定义的抽象方法。
抽象方法用abstract修饰,它没有方法体。
抽象方法的格式是:
abstract 返回类型 方法名([参数]);
抽象方法只能出现在抽象类中。
含有抽象方法的类必须定义成抽象类。
几点注意事项:
(1) 构造方法不能定义为抽象方法。
(2) 最终方法不能定义为抽象方法。(final 不能被重写不符合抽象的意义)
(3) static和private修饰符不能用于抽象方法

接口

[public] interface 接口名称
{
//接口体程序
}
接口是一系列没有实现的方法和常量的组合,是个功能模块。
接口隐含修饰符为abstract
没有public的接口,其访问将局限于该类所属的包。
接口继承通过关键字extends来实现,其语法与类继承相同,而且一个接口可以继承多个接口。
在类的继承中,所有的类,其超类均为Object,而接口没有所谓的超接口。

必须知道的接口特性
接口不可以被实例化,但可作为类型使用;
实现类必须实现接口的所有方法;
实现类可以实现多个接口;
接口中的变量都是静态常量;
接口可以继承多个接口;

所有定义在接口中的方法隐含为public和abstract。(jdk1.8有default接口也可以实现方法)
所有定义在接口中的常量隐含为public、static和final。定义在接口中的成员声明不允许使用以下修饰语比如private和protected修饰语。

**接口的实现 **
class 类名 implements 接口名1,接口名2…

一个类可以使用implements实现多个接口,从而实现多继承的机制。
实现接口的类必须实现接口中的所有方法。否则可定义为抽象类。
在类中实现接口中定义的方法时,不能比接口中定义的方法有更低的访问权限。因此,被实现的接口方法必须用public修饰。

接口和类之间的区别
(1)类只能继承一个类,而对于接口,可以实现继承多个接口。
(2)对于继承性,类继承了父类的方法,子类可以选择是否覆盖父类的方法。
(3)接口的方法没有实现,因此,类必须实现接口中的每个方法。

**抽象类与接口的比较**
抽象类和接口有些特性是相似的,如:
抽象类和接口都不能用来实例化对象。
可以声明抽象类和接口的变量,但对抽象类来说,要用抽象类的非抽象子类来实例化该变量;对接口来说,要用实现了该接口的非抽象子类来实例化该变量。
一个子类如果没有实现抽象类中声明的所有抽象方法,那么该子类也只能是一个抽象类;一个类如果没有实现接口中声明的所有方法,那么该类也是一个抽象类。
抽象类和接口都可以实现程序的多态性。

尽管抽象类和接口有些相似的特性,但它们在本质上是有很大区别的:
抽象类在Java语言中体现的是一个“父与子”的关系,即抽象类与子类之间必须存在“子类是父类中的一种”关系,如抽象类“水果”与子类“苹果”之间就存在“苹果是一种水果”的关系。而接口与接口的实现者之间不必有“父与子”的关系,接口的实现者只是具有接口中定义的行为而已。
抽象类中可以定义非抽象的方法,而接口中的所有方法都是抽象的。
接口中的数据成员只能是常量。
在抽象类中增加一个方法并赋予其默认的行为(即增加一个非抽象的方法),并不一定要修改子类,但如果接口被修改了,即增加或去掉了某个功能,则所有实现了该接口的类一定要修改。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值