Java基础教程,第十一讲,阻止继承与抽象类

上一节课我们学习了Java中的继承语法,以及如何继承中的方法重写和super()关键字,今天我们将学习一下如何阻止继承以及抽象类。

课程内容

阻止继承:final类和方法

有些时候我们希望阻止某个类被继承,不允许扩展的类可以定义为final类。在定义类的时候使用final关键字来修饰,语法如下:

public final class Executive{}

类中的特定方法也可以被声明为final。如果这样做,子类就不能覆盖这个方法。final类中的所有方法都会自动生成为final方法,语法如下:

public class Executive{
  public final int getAge()
  {
  }
}

前面我们说过域也可以定义为final,对于final域来说,构造对象之后就不允许修改值了。final类只会把方法生成为final,而域不会被设置。

为什么要使用final关键字?

将方法或者类声明为final的主要目的是:确保父类不会在子类中改变定义,String类声明为final类,不允许定义String的子类,也就是说如果有一个String类的引用,他引用的一定是String对象,而不是其他类的对象。

抽象类

先看一下抽象类的示意图:

什么是抽象类?

使用abstract关键字声明的方法称为抽象方法,包含一个或者多个抽象方法的类称为抽象类,必须使用abstract关键字修饰类。

为什么要使用抽象类?

抽象类可以总结出子类的通用方法,定义为抽象方法。

疑问与解惑

我在学习的过程中,一直有一个疑问,不知道大家有没有和我一样的想法?普通类也可以继承父类,也可以把通用的方法放到父类,实现代码复用,为什么还要用抽象类?思考一下!

很多博客在阐述继承优点时,大多都在讲复用,而真正的优点在于定义一个抽象类类型的引用P,可以通过P引用子类所实现的抽象方法。

还有一个优点就是,如果我们没有使用抽象类,那么子类可以不重写父类的方法,而使用抽象类普通类必须实现父类的所有抽象方法。

看一下下面的代码,我们通过抽象类实现一个播放器:

先定义一个抽象类:

抽象类中定义抽象的play方法,所有播放插件实现此方法进行播放。

测试类:

输出结果:

我们可以直接使用player引用来调用子类的play方法,进行播放。

特性

抽象方法,没有方法体,且抽象方法必须为Public修饰

抽象类不能被实例化。也就是说如果一个类声明为abstract,那么这个类就不能创建对象。

抽象类中可以包含非抽象方法,但如果一个类中的所有方法都是非抽象方法,那这个类没有任何意义。

普通类继承抽象类,必须实现抽象类中的所有抽象方法。

抽象类继承抽象类,不需要实现所有抽象方法。

小结

其实Java的面向对象看了不下三遍,其中Java编程思想一书中关于抽象也读过不下两次,每次都是似懂非懂,看完就忘了。学完本次课程,再加上播放器的简单Demo,对Java中的抽象类才算真正的理解了。

关注公众号,回复 java基础 下载全部代码+PDF版电子书

转载于:https://my.oschina.net/famoustone/blog/3012198

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值