抽象类

43 阅读2分钟

一. 概念

如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类。

抽象类除了不能实例化对象之外,类的其它功能依然存在,成员变量、成员方法和构造方法的访问方式和普通类一样。

二. 代码

public abstract class employee {  
    private String name;  
    public employee(String name) {  
        this.name = name;  
    }  
    public double coumpute() {  
        return 1;  
    }  
}

我们虽然不能实例化一个抽象类,但是我们可以实例化一个抽象类的非抽象子类,也就是如果一个非抽象类继承了抽象类,这个非抽象类是可以继承的

三. 抽象方法

Abstract 关键字同样可以用来声明抽象方法,抽象方法只包含一个方法名,而没有方法体。

抽象方法没有定义,方法名后面直接跟一个分号,而不是花括号。

public abstract class Employee
{
   private String name;
   private String address;
   private int number;
   
   public abstract double computePay();
   
   //其余代码
}

注意:

  • 如果一个类包含抽象方法,那么这个类必定是抽象类
  • 任何子类都必须重写父类的抽象方法,如果不重写的话它就得声明自己也是抽象类

四. 与接口进行比较

共同点

  1. 都不能被实例化
  2. 都可以包含抽象方法
  3. 都可以用默认实现的方法

不同点

  1. 接口主要是对类的行为进行约束,实现了接口就必须具有那个行为;抽象类则更加强调的是代码复用,所属关系
  2. 一个类只能继承一个抽象类但是可以实现多个接口
  3. 接口中的成员变量只能说public static final,不能被修改且必须有初始值。而抽象类的成员变量默认default,可在子类中被重新定义和赋值

五. 总结

  1. 抽象类不能被实例化
  2. 抽象类中不一定含有抽象方法,什么方法都可以有,但是有抽象方法的类一定是抽象类
  3. 抽象类中的抽象方法只是声明,不包含方法体也就是不给出方法的具体实现(具体功能)
  4. 构造方法、类方法(用static实现的方法)不能是抽象方法
  5. 任何子类都必须重写父类的抽象方法,如果不重写的话它就得声明自己也是抽象类
  6. abstract关键字不能与final连用,因为abstart类是要被继承的,连用了就相当于抽象类没用了