基本介绍
在面向对象的概念中,所有的对象都是通过类来描绘的,但是反过来,并不是所有的类都是用来描绘对象的,如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类。
抽象类除了不能实例化对象之外,类的其它功能依然存在,成员变量、成员方法和构造方法的访问方式和普通类一样。
个人理解就是,抽象类可能含有没有被实现的方法(抽象方法),抽象类不能被实例化,也就是不能够通过new关键字进行创建。
抽象类不一定有抽象方法,有抽象方法一定是抽象类。都是使用abstract进行标识
抽象类
下面就定义了一个抽象类
abstract class People {
}
由于People根据不同角度可以进行很多的划分,所以我们就把People设计为抽象类。可以发现抽象类可以没有抽象方法
抽象方法
abstract class People {
abstract String gerGender();
}
如果我们以性别来进行划分,那么我们定义一个方法,返回其性别。但是我们又不知道调用该方法的具体是什么性别,所以我们设计为抽象方法,让其子类来进行实现
使用
我们创建一个Man,Man会继承People。
class Man extends People {
@Override
String gerGender() {
return "男";
}
}
如果一个类继承了抽象类,那么就必须实现其所有的抽象方法,如果没有实现所有的抽象方法,那么当前类也应该使用abstract进行标识。
总结
- 抽象类可以不含有抽象方法
- 有抽象方法一定是抽象类
- 抽象类不能实例化
- 抽象类和普通类一样可以定义字段,实现方法
- 如果一个类没有实现抽象父类的所有抽象方法,那么这个类也是抽象的,必须使用abstract进行修饰
- 抽象类的对象变量只能引用非用非抽象类子类对象