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

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

课程内容

阻止继承: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对象,而不是其余类的对象。code

抽象类

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

什么是抽象类?

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

为何要使用抽象类?

抽象类能够总结出子类的通用方法,定义为抽象方法。继承

疑问与解惑

我在学习的过程当中,一直有一个疑问,不知道你们有没有和我同样的想法?普通类也能够继承父类,也能够把通用的方法放到父类,实现代码复用,为何还要用抽象类?思考一下!get

不少博客在阐述继承优势时,大多都在讲复用,而真正的优势在于定义一个抽象类类型的引用P,能够经过P引用子类所实现的抽象方法。

还有一个优势就是,若是咱们没有使用抽象类,那么子类能够不重写父类的方法,而使用抽象类普通类必须实现父类的全部抽象方法。

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

先定义一个抽象类:

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

测试类:

输出结果:

咱们能够直接使用player引用来调用子类的play方法,进行播放。

特性

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

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

抽象类中能够包含非抽象方法,但若是一个类中的全部方法都是非抽象方法,那这个类没有任何意义。

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

抽象类继承抽象类,不须要实现全部抽象方法。

小结

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

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

相关文章
相关标签/搜索