使用super關鍵字在子類的構造器里調用父類的普通方法,例如:
天水網站建設公司成都創(chuàng)新互聯(lián),天水網站設計制作,有大型網站制作公司豐富經驗。已為天水上千提供企業(yè)網站建設服務。企業(yè)網站搭建\成都外貿網站制作要多少錢,請找那個售后服務好的天水做網站的公司定做!
/**
*?父類
*?
*?@author?qd
*
*/
class?F?{
public?void?teatA()?{
System.out.println("teatA方法");
}
}
/**
*?子類
*?
*?@author?qd
*
*/
class?S?extends?F?{
//?子類構造器中調用父類普通方法
public?S()?{
super.teatA();
}
}
/**
*?測試類
*?
*?@author?qd
*
*/
public?class?Test1?{
public?static?void?main(String[]?args)?{
S?s?=?new?S();
}
}
運行結果:
最近我看見有人問過這個問題。在此我想表達一下自己的觀點。
根據(jù)面向對象中關于繼承這個概念子類繼承父類所有的屬性和方法。那么既然是所有的那么本人認為也應當也包括構造函數(shù)(方法)。
我先舉一個C++的例子:classParent{private:intp;public:Parent(void):p(0){}Parent(inti):p(i){}};classChild:publicParent{private:intc;public:Child(void):Parent(
),c(0){//在這里,創(chuàng)建Child對象時先構造父類域}Child(inti):Parent(i+1
),c(i){//同上}};
由于構造函數(shù)非常特別,對它的調用就像是調用一個C函數(shù)一樣,而不是利用對象來調用的(若不先構造對象哪兒來的對象?)。因此鑒于這份特殊性我們可以這么考慮:
將上述代碼中classChild:publicParent去掉:
public
Parent,我們可以編譯試試,是否能成功。事實上正是因為Parent與Child有親子關系,所以Child構造函數(shù)中可以調用Parent的構造函數(shù)先對其Parent域進行初始化。這個特點非常符合工程學詳見我的文章《我比起Java更喜歡C++的理由語義》。
下面將貼出相應的Java代碼:classParent{privateintp;publicParent(){p=0;}publicParent(inti){p=i;}}classChildextendsParent{privateintc;publicChild(){super();c=0;}publicChild(inti){super(i+1);c=i;}}
我們可以看到,在Java中可以利用super關鍵字來訪問本類父類的構造方法。這樣在一定程度上也消除了歧異性比如你也可以在Child類中的某一個方法中這么寫:Parent
p
=
new
Parent();而利用super()就表示了子類在初始化本類域前先初始化其父類域。這也可以證明在Java中子類繼承父類構造方法,并且子類可以通過super來訪問父類的構造方法,只要父類的構造方法不是private。
在做測試的時候,需要模擬HTTP server的handle函數(shù)直接調用:
就不用通過發(fā)送curl命令,而是直接調用handler函數(shù)的方式;這樣就需要手動構造出一個http.ResponseWriter和http.Request,然后調用Handler函數(shù)。
好在golang自帶的"net/http/httptest"包就有這個功能:
如果使用"github.com/gorilla/mux"的router包想使用Vars可以這么設置:
然后在Handler函數(shù)里,就能使用: