java抽象与接口考点,JAVA 抽象类与接口 基础知识点

JAVA 抽象类与接口

一、抽象类

了解抽象类要先了解 abstract关键词,在一个方法声明前加上abstract,这个方法就叫做抽象方法。抽象方法仅有声明而没有方法体。

abstract void f();

而包含抽象方法的类就是抽象类。抽象类必须在声明时也加上abstract关键词。抽象类本身是不能用来创建对象的。当然你也可以单纯的给类加上abstract关键词而不写抽象方法,但这除了阻止产生这个类的对象没有意义。

如果继承一个抽象类却不为基类的所有抽象方法提供定义,那么导出类也是抽象类,并且编译器会强制使用abstract来限定。

假设有Wind、Percussion、Stringed三个类继承了抽象类Instrument,抽象方法为play(),Brass,Woodwind又继承了Wind。

Instrument[] orchestra ={

​newWind(),

​newPercussion(),

​newStringed(),

​newBrass(),

​newWoodwind

};for( Instrument i : orchestra ){

​ i.play();

}

注:与普通的基类和子类相同,由于抽象基类与子类都具有play() 方法,输出时的play()方法会因为多态的特性显示为各自的实现。

二、接口

用来修饰接口的关键字是interface,这个关键字用来代替class,可以用public等来修饰。接口默认有包访问权限,同时域隐式地是static和final的,所以可以省略。

(tip:Java中具有常量初始化值的static final时,会用大写字母的风格,在一个标识符中,用下划线来分割单词)

在接口中定义的域不能是“空final”(也就是没有被初始化),但是可以被非常量表达式初始化。

接口是一个完全抽象的类,所有的方法都要由继承类来定义。它允许创建者确定方法名、参数列表和返回类型。作为一个极度抽象的类,不允许非抽象方法的存在。

要让继承类来实现接口(一个或一组),需要使用implements关键字,类似于extends。

要实现一个接口时,方法必须被设置为public的,否则在继承的过程中,方法的访问权限就被降低了(从接口中的默认public变成了类默认的protected)。

在Java中,类不能多重继承,但是可以实现多个接口,这些类全部置于implements关键字后。实现类可以向上转型为每个接口因为每个接口都是独立类型。

接口可以继承多个接口,extends后面接多个接口名就行。

在对接口实现多重继承时,要注意一个问题,那就是不同的接口类可能有同名的方法,如果返回值和参数都相同,那么问题不大,但是如果不同,覆盖、实现和重载就搅在了一起,而且重载不能仅通过返回类型区分,所以应该避免,不然会报错。

使用接口的核心原因:为了能够向上转型为多个基类型(以及由此带来的灵活性,比如说多个类实现了同一个接口,那么它们就可以通过向上转型的方式产生一些便捷的操作)。第二个原因是为了防止客户端程序员创建该类的对象,并确保这仅仅是一个接口。(第二个原因不太理解)

接口是实现多重继承的途径,而生成遵循某个接口对象的典型方式就是工厂方法设计模式,通过在工厂对象上调用创建方法,直接生成接口的某个实现的对象,可以将代码与接口的实现分离。好处是:可以透明的将某个实现替换为另一个实现(个人理解是,当更改实现类的代码时,不需要去修改创建该类实例的相关代码)。

​ 添加这种额外级别的间接性,一个常见的原因就是想要创建框架。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值