面向对象编程的核心是面向抽象编程,一般在开发过程中依赖抽象,不依赖具体
抽象类
包含抽象方法的类叫做抽象类。抽象类不允许直接创建实例,只能由子类提供方法实现后才能通过子类创建对象
抽象方法就是指没有方法体的方法,方法只做声明,没有具体的实现。抽象方法必须在子类中提供具体实现
抽象类中可以包含抽象方法,不是必须包含抽象方法
抽象类和普通类一样可以定义成员方法和成员属性,以及构造器和析构器。只是抽象类允许包含抽象方法
public abstract class Animal{
private String name;
Protected int age;
//构造器
public Animal(){}
public Animal(int age){}
//普通成员方法
public void sleep(){
System.out.println("闭眼");
}
public abstract void run();//抽象方法
}
public abstract class Mammal extends Animal{
//没有针对run这个方法提供实现,则当前子类只能是抽象类
}
public class human extends Mammal {
public void run(){}//允许空实现,但是不能没有实现
}
抽象类的特点
1、方法只有声明而没有具体的实现,则方法就是抽象方法
不是空实现方法体,是没有方法体
需要使用abstract修改,否则语法报错
抽象方法必须定义在抽象类中,该类也必须使用abstract修饰
2、抽象方法只能使用范围限定词中的public/protected/package默认,不能使用privateo
public void pp(这是一个包含空实现的方法,不是抽象方法
public void pp();这是一个没有方法实现的方法。在抽象类中要求必须使用abstract修饰
3、不允许定义抽象构造器 public abstract Animal(); 语法报错
4、抽象类或者抽象方法不允许为final
final类不允许继承,则不能定义子类
final方法不允许子类中覆盖定义,所以不能定义final抽象方法
5、抽象类中可以定义静态方法
6、抽象类不能之间创建对象,只能通过继承的方式定义子类,然后创建子类对象。子类对象可以赋值给抽象类声明的变量Animal a = new Mammal();