面向对象编程的核心就是面向抽象编程,开发中一般依赖抽象,不依赖具体。
抽象类简介
包含抽象方法的类叫做抽象类。抽象类不允许直接创建实例,只能由子类提供方法实现后才能通过子类创建对象。
抽象方法是指没有方法体的方法,方法只做声明,没有具体实现。抽象方法必须在子类中提供具体实现。
抽象类可以包含抽象方法,不是必须包含抽象方法。
语法:
public abstract class Flowers{} //抽象类
public class Rose extends Flowers{}//抽象类的子类,抽象父类中的抽象方法在子类中实现,抽象方法在父类中只能声明
Flowers bea = new Rose();//直接newFlowers会报错
特点:
包含抽象方法的类就是抽象类,但是抽象类中可以没有抽象方法
public abstract class Flowers{
public void pp(){}
public abstract void cc();//抽象方法,注意抽象方法不能包含方法体{}
}
抽象类不能直接进行new操作,只能定义具体实现的子类后进行new操作。
抽象类中可以定义构造器,也可以不定义构造器,由系统自动提供无参构造器。
抽象类不允许new操作和没有构造器无关。
public abstract class Flowers{} //abstract class 用于声明抽象类
public class Rose extends Flowers {}//具体类必须实现抽象类中的所有抽象方法,否则这个类还是抽象类
Flowers h = new Rose();
抽象类和普通类一样,可以定义成员方法、成员属性、构造器和析构器,抽象类允许包含抽象方法。
普通类继承抽象类,必须对抽象类中所有的抽象方法提供具体实现
public abstract class Flowers{
private String name;
protected int age;
//构造器
public Flowers(){}
public Flowers(int age){}
//普通成员方法
public void Grow(){
System.out.println("花期一个月")
}
public abstract void sale();//抽象方法
}
public abstract class Rose extends Floewrs{
//内部如果没有针对Sale方法提供实现,则当前子类只能是抽象类
}
public abstract class Lily extends Floewrs{
public void sale(){} //允许空实现,但是不能没有实现
}
在具体应用中,一般抽象类用于定义规范或者普通方法
通用方法是为了共享,避免子类重复定义
规范是为严格要求子类必须提供实现