從某種角度看,祖先類更具有通用性,我們只將它作為派生其他類的基類,而不作為想實現特定的例項類。
有的時候,許多子類都需方法,但是,超類並不使用這個方法,這些子類都要自身重寫這個方法,這時候超類中只需要宣告有這種方法,沒有必要有具體的執行語句。這種情況下,可以使用關鍵字abstract在超類中宣告這個函式,這個函式在超類中只有宣告,沒有定義,除了方法名和空的引數列表之外沒有任何東西。包含乙個或多個抽象方法的類本身就必須宣告為抽象類
超類中的抽象方法一定要在子類中得到實現定義,否則子類中會報錯。
但是有種情況下是一種特殊情況能new 出例項來。
public abstract class abstrect
public class text
};aa.echo();
}}
這種情況在程式中是極少出現的,因為例項化的時候連帶著將抽象類中的抽象方法也要定義了,如果抽象類中有多個抽象方法,那麼我例項乙個抽象類的物件要用幾十行**甚至上百行,這種情況是不希望出現的。在這裡注意一點,如果抽象類中有空的非抽象的方法可以不在例項化的時候定義,例如**中的echo1()如果不是抽象的,在測試的類中不會報錯。
public abstract class abstrect
public abstrect(string name ,int age)
public int getage()
public void setage(int age)
public string getname()
public void setname(string name)
}
public class abstractchild extends abstrect
@override
public void echo()
}
public class text
}
結果:
abstrectchild 類
由此,我們認識到,抽象類中可以存在抽象方法,也可以包含具體的方法和具體的資料。建議盡量將通用的域和方法放在超類中。抽象方法充當著佔位的角色,他們的具體實現在子類中。擴充套件抽象類的方法有兩種,一種是在抽象類中定義部分抽象方法或者不定義抽象方法,這樣就必須將子類也標記為抽象類,剩餘的抽象方法在子類中定義。另一種是定義全部的抽象方法,這樣一來,子類就不是抽象的了。
public abstract class person
public string getname()
public void echo()
}
public class employee extends person
public double getsalary()
public localdate gethireday()
public void raisesalary( double x)
public string change(double sa)
public void echo()
@override
public string getdescripition()
}
public class student extends person
public void echo()
@override
public string getdescripition()
}
public class generic
}}
結果:
我是員工類的抽象方法
我是學生類的抽象方法
taobao wo****aobao
java中的抽象類
抽象類是指類被修飾符abstract修飾的類。抽象類不能夠建立物件。抽象方法是只有方法名,沒有方法體,沒有具體的實現。含有抽象方法的類一定是抽象類!抽象的動物類 public abstract class animal在繼承關係中,子類繼承抽象的父類,如果在子類中沒有實現父類的抽象方法,則子類一定是...
java 中的抽象類
在自上而下的繼承層次結構中,位於上層的類更具有通用性,甚至可能更加抽象。從某種角度看,祖先類更加通用,它只包含一些最基本的成員,人們只將它作為派生其他類的基類,而不會用來建立物件。甚至,可以只給出方法的定義而不實現,由子類根據具體需求來具體實現。這種只給出方法定義而不具體實現的方法被稱為抽象方法ab...
Java中的抽象類
抽象類定義 1 語法定義 抽象類錢使用abstract關鍵字修飾,則該類為抽象類。2 應用場景 a 在某些情況下,某個父類只是知道其子類應該包含怎樣的方法,但無法準確知道這些子類如何實現這些方法 抽象類約束子類必須有哪些方法,但並不關注子類怎麼去實現這些方法。當多個類中出現相同功能,但是功能主體不同...