抽象類

一、抽象類:天生用來當爹的類

Java創建了一種專門用來當做父類的類,這種類稱爲抽象類。目的是要求設計者依據它的格式來修改並創建新的類。
注意:由於抽象類只能作爲父類,所以不能直接由抽象類創建對象,只能通過抽象類派生出新的類,再由新的類創建對象。

二、抽象類定義規則

  • 抽象類和抽象方法必須要用abstract關鍵字來修飾。
  • 抽象類不能被實例化,也就是不能用new關鍵字去產生對象。
  • 抽象方法只需聲明,而不需實現。
  • 含有抽象方法的類必須被聲明爲抽象類,抽象類的子類必須複寫所有的抽象方法後才能被實例化,否則這個子類還是個抽象類。

三、抽象類定義格式

abstract class 類名{    //定義抽象類的類名

    聲明數據成員;

    //定義一般方法
    訪問權限 返回值數據類型 方法名稱(參數...){
        ...
    }
    //end

    //定義抽象方法    只需聲明不需實現
    abstract 返回值數據類型 方法名稱(參數...);
    //end
}

注意:抽象類中方法的定義有兩種:一種是一般方法,另一種是抽象方法,它是以abstract關鍵字爲開頭的方法,此方法只聲明瞭返回值的數據類型、方法名、參數,沒有方法體。

eg:FirstDemo.java

abstract class Person{                                              //定義了一個抽象類,類名爲Person
    String name;                                                    //聲明瞭三個屬性 name age occupation
    int age;
    String occupation;

    abstract String talk();                                         //定義了一個抽象方法
}

class Student extends Person{                                       //定義一個類Student並繼承抽象類Person

    public Student(String name, int age, String occupation){        //Student類的構造方法
        this.name = name;
        this.age = age;
        this.occupation = occupation;
    }

        //因爲這個Student類繼承了抽象類Person,所以就要複寫抽象類Person中所有的抽象方法
        String talk() { 
        return "學生->姓名: "+this.name+", 年齡: "+this.age+",  職業: "+this.occupation;
    }

}

class Worker extends Person{                                        //定義一個類Worker並繼承抽象類Person

    public Worker(String name,int age,String occupation){           //Worker類的構造方法
        this.name = name ;
        this.age = age ;
        this.occupation = occupation ;
    }

        //因爲這個Student類繼承了抽象類Person,所以就要複寫抽象類Person中所有的抽象方法
        String talk() {
        return "工人->姓名: "+this.name+", 年齡: "+this.age+",  職業: "+this.occupation;
    }

}
public class FirstDemo {
    public static void main(String[] args){
        Student s = new Student("張三", 20, "學生");
        Worker w = new Worker("李四", 30, "工人");
        System.out.println(s.talk());
        System.out.println(w.talk());
    }
}

運行結果:
學生->姓名: 張三, 年齡: 20, 職業: 學生
工人->姓名: 李四, 年齡: 30, 職業: 工人

與一般的類一樣,抽象類中也可以擁有構造方法,但是這些構造方法必須在子類中被調用
eg:SecondDemo.java

abstract class Person{
    String name;
    int age;
    String occupation;

    public Person(String name, int age, String occupation){
        this.name = name ;
        this.age = age ;
        this.occupation = occupation ;
    }

    public abstract String talk();
}

class Student extends Person{

    public Student(String name, int age, String occupation) {
        //在這裏必須明確調用抽象類中的構造方法
        super(name, age, occupation);
    }

    public String talk() {
        return "學生->姓名: "+this.name+", 年齡: "+this.age+",  職業: "+this.occupation;
    }

}
public class SecondDemo {
    public static void main(String[] args){
        Student s = new Student("張三", 20, "學生");
        System.out.println(s.talk()) ;
    }
}

運行結果:
學生->姓名: 張三, 年齡: 20, 職業: 學生

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章