抽象方法

抽象方法的概念

  抽象方法主要指不能具体实现的方法并且使用abstract关键字修饰,也就是没有方法体。

具体格式如下:

  访问权限 abstract 返回值类型 方法名(形参列表);

  public abstract void cry();

 

抽象类的概念

  抽象类主要指不能具体实例化的并且使用abstract关键字修饰,也就是不能创建的对象

 

抽象类和抽象方法的关系

  抽象类中可以有成员变量、构造方法、成员方法;

  抽象类中可以没有抽象方法,也可以有抽象方法;

  拥有抽象方法的类必须是抽象类,因此真正意义上的抽象类应该是具有抽象方法并且使用

abstract关键字修饰的类。

 

为什么要求有抽象方法以后,AbstractTest这个类才是真正意义上的抽象类?

  抽象类中可以有抽象方法也可以没有抽象方法,抽象类是不能实例化对象的,抽象类为什么不能new对象?

抽象类为什么不能new对象?是因为抽象类中可能有抽象方法,而抽象方法是没有方法体的,调用抽象方法是没有意义的,

为了避免程序员不小心去调用抽象方法,因为连对象都new不了那么就调用不了抽象方法。

 

案例1:抽象类与抽象方法

 抽象类的实际意义

  抽象类的实际意义不在于创建对象而在于被继承。

  当一个类继承抽象类后必须重写抽象方法,否则该类也变成抽象类,也就是抽象类对子类具有强制性和规范性,

因此叫做模板设计模式

开发经验分享:

  (注意:)如果在开发中必须要有某个方法,但是这个方法无法具体实现就可以把该方法写成抽象方法,这个类就

变成抽象类。

  在以后的发开中推荐使用多态的格式,此时父类类型引用直接调用的所有方法一定是父类中拥有的方法,若以后

更换子类时,只需要将new关键字后面的子类类型修改而其他地方无需改变就可以立即生效,从而提高了代码的可维护

性和可扩展性。

   该方式的缺点就是:父类引用不能直接调用子类独有的方法,若调用则需要强制类型转换。

 

案例2:实现抽象类

 

案例3:多态在抽象类中的优势

 

   如果有一天我们想更换子类,我们只需要把new后面的类型更改,也就是在类名后面加一个2就可以了,后面的代码不需要动

使用的就是Test2子类重写的show方法

 

   需要更换子类的时候很方便,可维护性很强。

 

笔试考点:

1、private 和 abstract 关键字不能共同修饰一个方法

  子类不能继承父类的原因只有两个,一个是私有方法一个是构造方法;一旦方法标记成private子类不能继承,不能继承就不要

谈重写了,抽象方法不能被子类重写,他自己又没有方法体所以就没有意义了。

2、final 和 abstract 关键字不能共同修饰一个方法

  final关键字修饰的方法不能被重写可以被继承,而抽象类指望被重写才能使用

3、static 和 abstract 关键字不能共同修饰一个方法

  抽象类不能new对象,如果抽象类提升为类层级就可以使用类名.的方式使用方法,而抽象类是没有方法体的,所以这样相当于打

脸自己

posted @ 2020-09-03 21:42  IJLog  阅读(3104)  评论(0编辑  收藏  举报