一:问曰篇
问:何为抽象类?
曰:包含抽象方法的类,用abstract修饰

    //没错,我就是抽象类啦!
    public abstract class BigLao{
   
    }

问:何为抽象方法?
曰:只有方法声明,没有方法体的方法,也用abstract修饰

  public abstract class BigLao{
   
        //也没错,我就是抽象方法
        public abstract void work();
    }

问:抽象方法由来?
曰:当需要一个方法,却不明确方法的具体实现时,可以将该方法定义为抽象方法,具体实现由子类完成!

别找了,这里没有代码演示。

二:解析篇
1.抽象类的特点(very 重要!!!
*必须用abstract修饰符修饰:
修饰符 abstract class 类名 {}
修饰符 abstract 返回类型 方法名 {}

*抽象类不能被实例化,只能创建子类对象:

*作为继承抽象父类的子类的去路:要么重写父类所有抽象方法,要么也定义为抽象类

  System.out.println("自己敲代码验证一下试试");

*成员变量:
1.普通成员变量:

 //抽象类也可以有普通成员变量:
     String name;

2.成员常量:

 //也可以有成员常量:
     final int AGE = 250;

*可以有普通方法和抽象方法,抽象类不一定有抽象方法,有抽象方法的一定是抽象类(或接口)

  //抽象类的普通方法
    public static void sleep(String name){
   
        if (name.equals("大佬")){
   
            System.out.println(name+"休息中,请勿扰!");
        }else {
   
            System.out.println("滚去搬砖!立刻!马上!");
        }
    }

*可以有像普通类一样的构造方法,且可以重载哈!
有参构造:

    //抽象父类也可以有有参构造方法且可以重载:
    public BigLao(String name,int num){
   
        System.out.println("类型:"+"大佬的小弟"+"\n"+"姓名:"+name+"\n"+"战斗力:"+num);
    }

无参构造:

    //抽象父类可以有无参构造方法:
    public BigLao() {
   
        
    }

三:展示篇
想到的都说差不多啦,接下来请欣赏完整代码演示:
*定义抽象父类:

package 面向对象.抽象类;/* *@Author:Tstr *@Date:2020/8/13 10:47 *@from:lenovo *@e-mail:x20135201314boy@126.com */
//定义一个抽象父类:大佬类
public abstract class BigLao {
   
    //抽象类也可以有普通成员变量:
     String name;
     //也可以有成员常量:
     final int AGE = 250;
    //定义一个工作(work)的抽象方法:
    public abstract void work();
    //抽象父类可以有无参构造方法:
    public BigLao() {
   

    }
    //抽象父类也可以有有参构造方法且可以重载:
    public BigLao(String name,int num){
   
        System.out.println("类型:"+"大佬的小弟"+"\n"+"姓名:"+name+"\n"+"战斗力:"+num);
    }

    //抽象类的普通方法
    public static void sleep(String name){
   
        if (name.equals("大佬")){
   
            System.out.println(name+"休息中,请勿扰!");
        }else {
   
            System.out.println("滚去搬砖!立刻!马上!");
        }
    }
}

*创建子类:小弟类

package 面向对象.抽象类;/* *@Author:Tstr *@Date:2020/8/13 10:58 *@from:lenovo *@e-mail:x20135201314boy@126.com */
//定义一个子类:小弟类,继承父类:大佬类
public class XiaoDi extends BigLao {
   

    public XiaoDi() {
   
    }

    public XiaoDi(String name, int num) {
   
        //super(name, num);
        super.sleep("大佬");
        System.out.println("类型:"+"大佬的小弟"+"\n"+"姓名:"+name+"\n"+"战斗力:"+num);
    }

    //子承父类必须重写父类的所有抽象方法
    @Override
    public void work() {
   
        System.out.println();
        System.out.println("工作内容:");
        System.out.println(name+"为大佬跑腿!");
        System.out.println(name+"给大佬点烟!");
        System.out.println(name+"替大佬干架!!");
    }

}

*创建子类:马子类

package 面向对象.抽象类;/* *@Author:Tstr *@Date:2020/8/13 11:09 *@from:lenovo *@e-mail:x20135201314boy@126.com */
//定义一个子类:马子类,继承父类:大佬类
public class MaZi extends BigLao {
   

    public MaZi() {
   
    }

    public MaZi(String name, int num) {
   
       // super(name, num);
        System.out.println("类型:"+"大佬的马子"+"\n"+"姓名:"+name+"\n"+"战斗力:"+num);

    }

    //父类抽象方法重写
    @Override
    public void work() {
   
        System.out.println();
        System.out.println("工作内容:");
        System.out.println(name+"正在给大佬倒酒!");
        System.out.println(name+"给大佬揉肩,小拳拳锤他胸口!");
        System.out.println(name+"在和大佬做不可描述的事....(坏笑ing)");
    }
}

*创建抽象子类:司机类

package 面向对象.抽象类;/* *@Author:Tstr *@Date:2020/8/13 11:04 *@from:lenovo *@e-mail:x20135201314boy@126.com */
//定义一个子类:司机类,给大佬开车
//子类继承父类小弟类,的第二种情况:也定义为抽象
public abstract class Driver extends BigLao {
   
   //子类的抽象方法:
    public abstract void drive();
}

*创建测试类:

package 面向对象.抽象类;/* *@Author:Tstr *@Date:2020/8/13 11:16 *@from:lenovo *@e-mail:x20135201314boy@126.com */

public class BigLao_Test {
   
    public static void main(String[] args) {
   
        //测试普通方法
        //1.抽象类不能被实例化,只能创建子类
        //测试抽象类的构造方法
        //2.利用多态测试小弟类
      BigLao bigLao = new XiaoDi();
      //子类实现父类的构造方法并调用
      new XiaoDi("丁力",100000);
      bigLao.name = "丁力";
      bigLao.work();
        System.out.println("---------华丽分割线------------");
        new MaZi("冯程程",1000);
      //3.利用多态测试马子类
        BigLao bigLao1 = new MaZi();
        bigLao1.name = "冯程程";
        bigLao1.work();
        System.out.println("---------华丽分割线------------");
        //4.利用多态测试司机类
        BigLao bigLao2 = new Driver() {
   
            @Override
            public void drive() {
   
                System.out.println("司机正在开车,去干架的路上...");
            }
            @Override
            public void work() {
   
                System.out.println("司机已经开到点儿啦,正掏出斧头,干架中!");
            }
        };
        //5.测试抽象子类:司机类
        bigLao2.work();
        System.out.println();
        System.out.println(">>>>>>>>>>>>>>>>>>>>>>>>>>>>");
        System.out.println("那么问题来了,大佬是谁?");
        System.out.println("->>评论区见! ");
        System.out.println(">>>>>>>>>>>>>>>>>>>>>>>>>>>>");
    }
}

*测试结果展示: