抽象类的产生:
分析事物时,发现了共性内容,就出现向上抽取。会有这样一种特殊情况,就是方法功能声明相同,但方法功能主体不同。
那么这时也可以抽取,但只抽取方法声明,不抽取方法主体。那么此方法就是一个抽象方法。
实例分析:
描述JavaEE工程师:行为:工作。
描述Android工程师:行为:工作。
JavaEE工程师和Android工程师之间有共性,可以进行向上抽取。抽取它们的所属共性类型:研发部员工。
由于JavaEE工程师和Android工程师都具有工作功能,但是他们具体工作内容却不一样。
这时在描述研发部员工时,发现了有些功能(工作)不具体,这些不具体的功能,需要在类中标识出来,通过java中的关键字abstract(抽象)。
抽象类和抽象方法的定义:
1、抽象方法定义的格式:
public abstract 返回值类型 方法名(参数);
2、抽象类定义的格式:
abstract class 类名 {
}
举例:
//研发部员工 abstract class Developer { public abstract void work();//抽象函数。需要abstract修饰,并分号;结束 } //JavaEE工程师 class JavaEE extends Developer{ public void work() { System.out.println("正在研发淘宝网站"); } } //Android工程师 class Android extends Developer { public void work() { System.out.println("正在研发淘宝手机客户端软件"); } }
抽象类的特点:
1、抽象类和抽象方法都需要被abstract修饰。抽象方法一定要定义在抽象类中。
2、抽象类不可以直接创建对象,原因:调用抽象方法没有意义。
3、只有覆盖了抽象类中所有的抽象方法后,其子类才可以创建对象。否则该子类还是一个抽象类。
抽象类的细节问题:
1、抽象类一定是个父类?
是的,因为不断抽取而来的。
2、抽象类中是否可以不定义抽象方法。
是可以的,那这个抽象类的存在到底有什么意义呢?不让该类创建对象,方法可以直接让子类去使用
3、抽象关键字abstract不可以和哪些关键字共存?
①private:私有的方法子类是无法继承到的,也不存在覆盖,而abstract和private一起使用修饰方法,abstract既要子类去实现这个方法,而private修饰子类根本无法得到父类这个方法。互相矛盾。
②final,暂时不关注,后面学
③static,暂时不关注,后面学
例题:
求周长
public abstract class shape { public abstract void zhouchang(int r); } public class cracle extends shape{ //当一个普通类继承了抽象类的时候,必须重写这个类中的所有抽象方法 public void zhouchang(int r){ double area=Math.PI*r*r; System.out.println(area); } } public class shape2 extends shape{ public void zhouchang(int r) { System.out.println("正方形的面积是"+4*r); } } public static void main(String[] args) { cracle c=new cracle(); c.zhouchang(5); shape2 j=new shape2(); j.zhouchang(4); }