Java基礎:抽象類

前言:

在前面已經又博文介紹過 繼承 相關的知識,抽象類可以說是在繼承基礎上的進一步深化。
通過繼承,我們瞭解到:
1、多個子類中擁有相同的方法:將其提取到父類中,再繼承即可。
2、多個子類的方法 各不相同: 各自處理,不要在父類中放。
那麼: 多個子類的方法 方法名(方法標籤)相同,但方法體不同,有什麼更好的方法進行處理嗎?
答案是有的: 抽象方法。

繼承:繼承不瞭解的可以戳我哦

抽象方法與抽象類:

在說抽象類之前先來介紹一下 抽象方法,以及什麼時候更好的選擇用抽象方法。
介紹之前先看一段代碼:

Pet.java (父類):

package pat;

public class Pet {
    private String name;
    private int love;
    private int health;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getLove() {
        return love;
    }

    public void setLove(int love) {
        this.love = love;
    }

    public int getHealth() {
        return health;
    }

    public void setHealth(int health) {
        this.health = health;
    }
}

Dog.java(子類):

package pat;

public class Dog extends Pet{

    private String Strain;

    public String getStrain() {
        return Strain;
    }

    public void setStrain(String strain) {
        Strain = strain;
    }

    public void print() {
        System.out.println(getName() + " " + getLove() + " " + getHealth() + 
        " " + this.Strain);
    }

}

Cat.java(子類):

package pat;

public class Cat extends Pet{

    private String sex;


    public String getSex() {
        return sex;
    }

    public void setSex(String sex) {
        this.sex = sex;
    }

    public void print() {
        System.out.println(getName() + " " + getLove() + " " + getHealth() + 
        " " + this.sex);
    }
}

通過上面的代碼我們可以發現,在兩個子類中就有我們前言中提到的問題:
看一下 print() 方法, 兩個子類中 方法名相同,但是方法裏面的內容有所不同。
這個時候就可以用抽象方法啦,具體實現如下:

抽象方法必須在抽象類中進行定義,所以在寫抽象方法時必須是一個抽象類,但抽象類中可以沒有抽象方法。
抽象類中可以有抽象方法也可以有普通方法.

package pat;

public abstract class Pet {
    private String name;
    private int love;
    private int health;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getLove() {
        return love;
    }

    public void setLove(int love) {
        this.love = love;
    }

    public int getHealth() {
        return health;
    }

    public void setHealth(int health) {
        this.health = health;
    }
    
    public abstract void print();
    
    
}

子類要繼承父類就必須要重寫父類中的抽象方法,即將 父類中的抽象方法進行實現,也可以不實現,
必須要有,這樣的好處是什麼呢?
相當於老總給兩個人分配了一個任務,只說了題目,剩下的你就可以自由發揮啦。
在實際開發項目中,肯定是先有一個大致的框架,然後再進行慢慢實現(個人理解)

抽象類不能進行實例化:

	有兩個原因:
	1、語法要求,當你進行實例化時,是會報錯的。
	2、實例化沒有太大的意義,抽象類中的抽象方法是沒有內容的,實例化所調用的抽象方法沒有內容
	那調用它做什麼呢,你可能會想,那普通方法呢?抽象類一般用於繼承中,子類既然繼承父類啦,
	父類的方法子類就可以直接用啦,只要我的兒子可以好,我累點我所謂(可憐天下父母心)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章