Java基础(抽象类)

文章目录

前言:

一、什么是抽象

二、抽象类的应用

三、抽象类的特点

总结:


前言:

该篇文章主要讲述java中的抽象类和抽象方法的知识点,当一个类中没有包含足够的信息以描绘一个具体的对象时,这样的类就是抽象类;“抽象类”是用关键字 abstract 修饰的,抽象类中有一种特殊方法,即用abstract 关键字来修饰的方法,这些方法被称为“抽象方法”。

若想学习抽象,必须掌握Java继承相关的知识,相关可见Java基础(继承)。


一、什么是抽象

假设公司要进行招聘,招聘岗位为产品经理和程序员,设计了如下网站让报名人员填写基本信息

Java基础(抽象类)_第1张图片

此时可以发现,该网站大部分内容都是相同的,于是我们可以对其进行如下修改

Java基础(抽象类)_第2张图片

上述将一些相同的信息都提取到一起的这个过程就叫做“抽象”

二、抽象类的应用

在上述案例中,我们可以发现,虽然我们可以抽取出一些共性,但是每个类都有各自的一些实现方式,比如程序员和产品经理,虽然他们都要工作但是他们的工作内容不同,也就是说我们只能抽取共性,但是他们的具体实现我们无法干预,此时就可以使用我们的抽象类来进行实现:

//描述员工
abstract class Employee{

    private String name ;
    private String id ;
    private double pay ;

    Employee(String name,String id, double pay){
        this.name = name;
        this.id = id;
        this.pay = pay;
    }

    public abstract void work();

}

//描述程序员
class Programmer extends Employee{

    Programmer(String name,String id, double pay){
        super(name,id,pay);
    }

    public void work(){
        System.out.println("code" );
    }

}

//描述产品经理
class Manager extends Employee{

    Manager(String name,String id, double pay){
        super(name,id,pay);
    }

    public void work(){
        System.out.println("manage" );
    }

}

 注:super 关键字有两个用途    一是调用父类的方法,二是调用父类的构造器

上述就是一个简单抽象类的应用,我们可以看到通过抽象类,我们不需要再在父类中进行不必要的方法构建,从而省去了每次子类继承父类都要对父类中该根本使用不到的方法进行重写,因为抽象类的简单和快捷,所以我们会经常对其进行使用,也因此该部分内容必须牢牢掌握

三、抽象类的特点

 以下皆为重点:

  1. abstract修饰的类叫做抽象类,abstract修饰的方法叫做抽象方法
  2. abstract修饰的抽象方法不需要在抽象类当中实现但是必须在子类当中重写并实现,前提是子类不是抽象类(如果不想实现抽象类中的抽象方法,那么该此子类必须是个抽象类
  3. 抽象类一定是父类,因为抽象方法需要子类去重写实现
  4. 只有抽象类当中才能有抽象方法,普通类当中不能有抽象方法
  5. 抽象类当中不一定非要写抽象方法,也可以写普通方法
  6. 抽象类不能被实例化(不能被创建对象),但是可以使用多态
  7. final和abstract不能同时使用,final修饰的类不能被继承,只能使用多态
  8. abstract修饰的方法不能被static修饰,static是针对类层次,抽象方法是针对对象层次的,所以不能一起使用
  9. 抽象方法不能使用private访问修饰符修饰,private修饰的方法是子类不可见的, 而abstract修饰的方法要求重写,二者冲突
  10. 抽象类是有构造器的,但是它的构造器不能创建对象,目的是为了完成一些必要的初始化操作

注:构造器的作用是构建对象的同时赋初始值,但抽象类的构造器只能进行初始化操作而不能进行创建对象


总结:

抽象类的理念是对某个操作下一个定义,然后将该操作交给子类去实现。

至于为什么不在一般类定义一个空方法,然后去交给子类实现,这是因为一般类没有在语法上强迫子类一定要实现这个方法,所以如果子类忘了去实现的话,软件有很大的可能会出错,而使用抽象类则会强制要求子类必须实现抽象类当中定义的抽象方法,因此可以避免出现子类忘记实现某些功能导致软件出错的可能。

你可能感兴趣的:(JAVA基础,java,开发语言)