Java-抽象

一、概述

​ 抽象类用来描述一种类型应该具备的基本特征与功能,具体如何实现由子类通过方法重写完成:比如交通工具类都能移动,但是船是在水上移动,车是用轮子移动。所以交通类当中可以声明一个移动()方法,但是不写移动实现的细节,交由船(子类)或者车(子类)对移动()方法具体实现。

1、抽象定义格式

  • 抽象方法定义格式:public abstract 返回值类型 方法名(参数)
  • 抽象类的定义格式:abstract class

2、抽象的特点

  • 抽象类和抽象方法都需要被abstract修饰,抽象方法一定要定义在抽象类
  • 抽象不能直接创建对象,因为调用抽象方法没有意义。
  • 只有覆盖了抽象类中所有的抽象方法后,其子类才可以创建对象,否则该子类还是一个抽象类
  • 之所以继承抽象类,更多的是在思想,面对共性操作更简单,让代码更规范。

3、抽象类的注意事项

  • 抽象类是父类一定是个父类,因为是不断抽取而来的。

  • 抽象类可以不定义抽象方法,其存在的意义就是不让该类创造对象,方法可以直接让子去使用

  • 抽象关键字 abstract 不可以和以下关键字共存

    private:私有方法子类是无法继承的,也不存在覆盖,如果abstract和private一起使用修饰方法,abstract既要子类去实现这个方法,而private修饰子类根本无法得到父类这个方法,互相矛盾。

    final:final修饰的类不能被继承,而抽象类一定是父类

    static:static修饰表示静态的,不能被修改的,但可以直接被类所调用,而abstract修饰的是抽象的,既没有方法实体,也不能直接被调用。

二、代码实例

  • 先创建Develop.java父类,创建Develop抽象类,并创建抽象方法

/**
 * 定义开发人员类,所有开发人员都具有工作的共性,
 * 对工作共性进行抽取,然后形成一个Develop类
 * 定义方法:工作
 * 抽象类不能实例化对象,即不能new,抽象方法没有主体,不能运行
 * 抽象类的使用:可以定义类继承抽象类,将抽象方法进行重写,创建子类的对象
 */
public abstract class Develop {
    //定义工作方法,但具体怎么工作,并不明白,所以干脆不说,即抽象方法
    //必须使用abstract关键字修饰
    //抽象的方法必须存在抽象类中,类也必须使用abstract关键字修饰
    public abstract void work();
}

  • 再创建Php.java子类,重写父类的抽象方法

/**
 * 定义PHP开发人员
 * 继承抽象类Develop,重写抽象的方法
 */
public class Php extends Develop {
    //重写父类的抽象方法,去掉abstract关键字,加上方法主体
    public void work()
    {
        System.out.println("正在开发网页!");
    }
}

  • 在Main.java中调用

public class Main {
    public static void main(String[] args)
    {
        Php ph = new Php();
        ph.work();
    }
}

实例解析

  • 将共性“研发人员”抽取出来形成一个Develop类并定义方法:工作
  • 抽象类不能实例化,即不能 new 抽象方法没有主体
  • 可以定义类来继承抽象类,将抽象类进行重写,然后创建子类的对象
  • 重写父类的抽象方法时,去掉abstract关键字,加上方法主体
posted @ 2021-04-12 17:55  废熊  阅读(84)  评论(0)    收藏  举报