1,什么是抽象类:

  • 没有方法体的方法被称为 抽象方法,在类中有 抽象方法 的类 ,必须被定义为:抽象类。
  • 但抽象类不一定有抽象方法;
  • 注意:!!!抽象类不能创建对象;
  • 抽象方法的 格式:

public abstract 方法名 (参数列表) { }

  1. //何为 没有方法体 的方法:
  2. public abstract void setAge();
  3. //就是抽象方法
  4. //因为有抽象方法的类必须定义为抽象类:(否则报错)
  5. public abstract class Fu

2,抽象类 的使用场景:

父类知道子类一定要完成某个功能,但是每个子类实现的情况都不一样,父类的该功能就可以定义为抽象方法,这样就能约束子类去重写抽象方法,就不会忘记写这个功能啦。

3,抽象类的 继承与调用(有调用就有子类继承):

  1. 如果要调用抽象方法的话,必须由子类继承抽象类,并且必须对所有的抽象方法进行重写才可以被调用;(因为调用抽象方法无意义)
  2. 如果不重写,那子类也要定义为抽象类;

    1. //Fu类为抽象类;
    2. public abstract class Fu {
    3. }
    4. //子类继承 抽象类 Fu类
    5. public class Zi extends Fu{
    6. @Override
    7. public void setAge() {
    8. System.out.println("子类重写的抽象方法");
    9. }
    10. }
  3. 抽象类不能被创建为对象;

  4. 那既然在子类中重写了,那就直接用子类创建对象去调用子类重写后的方法就行了。

    1. Zi zi = new Zi();
    2. zi.setAge();

    4,父类中的抽象方法有必要存在吗?

    如果父类没有抽象方法,子类也没有这个方法,那这个功能就缺失了; 抽象类对团队需求的实现实际上是有一种约束作用,让子类一定要去实现这个方法。 比如,在我的需求中需要一个功能,但是,这个功能是由别人写的,不属于我的需求范围,这个时候就可以把这个功能写成一个抽象方法,项目转手后,能够让那个人记得一定要去进具体的子类方法重写并实现这个功能。(否则会报错)这样就不会因为人为原因导致需求功能的丢失。

    5,多个抽象方法存在的情况:

    image.png

    1. //Fu类是个抽象类,且有多个抽象方法。
    2. public abstract class Fu {
    3. public abstract void setAge();
    4. public abstract void setParsee();
    5. }
    6. //子类继承父类,并改为抽象类,因为子类没有把父类的抽象方法重写完。
    7. public abstract class Zi extends Fu{
    8. @Override
    9. public void setAge() {
    10. System.out.println("子类重写的抽象方法");
    11. }
    12. }
    13. //如果要调用所有抽象方法就必须要把 所有抽象方法重写。上述代码无意义。(仅举例使用) !!!

    6,抽象类和普通类的区别(抽象类的特点):

  5. 抽象类得到了,定义抽象方法的能力;

  6. 但是失去了创建对象的能力;(同样不能创建对象的还有被private修饰的类,被私有了)
  7. 除此之外,其他的和普通类一样;