抽象类

抽象类的产生:

分析事物时,发现了共性内容,就出现向上抽取。会有这样一种特殊情况,就是方法功能声明相同,但方法功能主体不同。

那么这时也可以抽取,但只抽取方法声明,不抽取方法主体。那么此方法就是一个抽象方法。

实例分析:

描述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);
    }
原文地址:https://www.cnblogs.com/Ace-suiyuan008/p/9365108.html