導航:首頁 > 編程語言 > java抽象靜態方法

java抽象靜態方法

發布時間:2024-05-30 06:19:50

java中抽象方法不能為private,final或者static,為什麼細細說明,或給個例子

4)抽象方法不能為private,final或者static,為什麼?馬克-to-win:抽象方法的最實質的意
義在於被未來的子類覆蓋實現掉。它自己是個空方法。private的實質意義在於本類其他方法調用它。你自己是個空方法,別人調用你有什麼用?所以
abstract和private在一起毫無意義。final規定子類不能再覆蓋它。abstract是專等著要別人來覆蓋,二者矛盾。所以不能放在一起
使用。有關static,我們上一章講過:馬克-to-win:static的成員是在程序執行到main時就已經確定的。要不為什麼起
名叫靜態static呢?而本章後面,我們要講多態的動態方法調度。動態方法調度就是指在運行時才決定執行哪個方法(是子類的還是父類的)。比如運行時如
果用戶輸入自行車,就執行自行車的駕駛方法。馬克-to-win:如果用戶輸入小轎車,就執行小轎車的駕駛方法,涉及到用戶,這些都只能在運行時才能幹。
而abstract一定用到動態方法調度。所以這靜態和動態二者是矛盾的,不能一起用。因為道理是這樣,所以當時sun公司的設計者就這樣設計
了.。。。。。。。。。
詳情網上找「馬克-to-win」,參考他的網站或他的網路空間:java第三章的內容,如果實在找不到,按我下面說的地址找:

網站名是:mark-to-win.com
再附加上下邊的路徑地址: /JavaBeginner/JavaBeginner3_web.html#AbstractNotFinalPrivateStatic

⑵ 請分析在JAVA中,靜態類,抽象類,實例類,靜態方法,抽象方法,介面,以及繼承,實現的關系概念

如果真要看數的話,這些概念幾頁書都看不完!看完了你看不懂,還必須看十幾頁的範例,自己練習幾十遍才能搞懂!

先聲明一點:下面都是我個人的理解,但是否理解正確我不敢保證,所以如果因為我的誤導使你有錯誤的理解,我在此表示抱歉。
我這里就用最簡單的例子簡單的說明:
1.靜態方法:
1>類A裡面有非靜態方法b,則調用b方法是:new A().b();
實際原理:b並不存在內存中,需要實例化A來獲取b
實際應用:b方法中需要用到A類里的變數
2>類A裡面有靜態方法b,則調用b方法是:A.b();
實際原理:b已經存在內存中,可通過A的名稱直接調用,無需實例化A類
實際應用:b方法中不需要用到A類里的變數

2.靜態類,只存在於內部類,如果內部類裡面有靜態方法,則內部類必須是靜態類。實際應用中極少用到,至少我出來工作後從來沒用到過。
1>類A裡面啊有非靜態類B,B裡面有非靜態方法c,調用c方法是:new A().new B().c();
2>類A裡面啊有非靜態類B,B裡面有靜態方法c,這種情況不存在!因為c是靜態方法,B就必須是靜態類!
3>類A裡面啊有靜態類B,B裡面有靜態方法c,調用c方法是:A.B.c();
1>類A裡面啊有靜態類B,B裡面有非靜態方法c,調用c方法是:new A.B().c();

3.實例類,就是一般的類和非靜態內部類。沒啥好說的。

4.抽象方法
只有方法名和傳入參數,沒有實現內容。
例如有一個方法c如下:
public void c(String printText) {
System.out.println(printText);
}
對應的抽象方法就是:
public void c(String printText);
但抽象方法只能放在「抽象類」和「介面」中

5.介面類,介面類裡面只能放抽象方法,需要實現類來實現介面的抽象方法。
介面的目的有點類似書本的「目錄」所起的作用,用戶只需要關注方法實現了什麼功能,而不用去關注具體實現方法的內容。
常見的例子有:
Set<String> set = new TreeSet<String>();
Set<String> set = new HashSet<String>();
同一個介面,則必須介面規定的固有屬性,Set介面就是唯一性。
不同實現類,則具備不一樣特殊屬性:
TreeSet具備自動排序功能,但不能保存null
HashSet無序,但能存null
另外,一個實現類可實現(implements)多個介面類,但必須實現所有介面裡面的所有抽象方法。

6.抽象類,夾在一般類和介面中間,可放普通方法,也可放抽象方法,但抽象方法必須加abstract。
例如:
abstract public void test();
抽象類如果被一般類所繼承(extends),則一般類必須實現抽象類的抽象方法。

7.繼承,所有類之間都有可以有一個繼承關系,但要注意以下幾點:
1>介面類只能繼承介面類,可多繼承
2>除介面類以為的所有類,只能單繼承,即只能繼承一個類,並且不能繼承介面!
3>一般而言繼承之後,子類就擁有父類的方法,但如果父類有方法是私有的,則即使繼承也無法調用。

以上所說只是一個簡單的概括,肯定有很多遺漏的細節!還是必須多看書!多練習!!

⑶ java涓闈欐佸彉閲忓拰闈欐佹柟娉曞垎鍒鏈変粈涔堢壒鐐

鎵懼埌涓綃囩浉鍏蟲枃絝狅紝鍐欏緱寰堟竻妤氾紝鍒嗕韓涓涓
瀵箂tatic 淇楗扮︿箣闈欐佸彉閲忓拰闈欐佹柟娉曠殑鐞嗚В- -

鎴戜滑鐭ラ亾,鍙瑕佹槸綾,鏃犺轟粈涔堢被(鍖呮嫭鎶借薄綾),閲岄潰鍙鏈夋柟娉曞拰鍙橀噺,鑰岃佷嬌鐢ㄨ繖涓綾繪垜浠涓鑸鍒嗕袱姝ヨ蛋,濡,涓涓鍛樺伐綾籈mployee

Employee s;//瀹氫箟浜嗕竴涓狤mployee鐨勫紩鐢
s=new Employee("Aaron",1980,3,1,1500);//榪欐牱鎵嶇湡姝e緩絝嬩簡涓涓瀵硅薄s,涔熷氨鏄璇磗鎸囧悜浜嗗唴瀛樹腑鐨勪竴鍧楄繛緇鐨勫尯鍩.

鈥旇繖閲屾敞鎰忎粈涔堟槸鐪熸g殑瀵硅薄,浠涔堟槸寮曠敤鈥

濡傛灉鎴戜滑瑕佹敼鍙樿繖鍧楀尯鍩,闇璋冪敤鍏朵腑鐨勬柟娉,濡
s.raiseSalary(25);//raiseSalary(double)涓篍mployee 涓鐨勬柟娉

榪欐牱,鎴戜滑閫氳繃鏂規硶(綾繪柟娉)鏀瑰彉浜嗙被涓鐨勫彉閲(綾繪暟鎹鎴栫被鍙橀噺).

鎵璋撻潤鎬佹柟娉,灝辨槸閫氳繃綾誨悕鏉ヨ皟鐢(褰撶劧閫氳繃綾誨硅薄鏉ヨ皟鐢ㄤ竴鏍鋒槸鍙浠ョ殑,灝卞儚core java閲岃寸殑涓鏍,瀹規槗璁╀漢娣鋒穯!)鐨勬柟娉,
鑰岄潤鎬佸彉閲忓畠鏄涓縐嶅叡浜鍙橀噺(VB.net閲岄潰濡傛ょО鍛,姣旇緝瀹規槗鐞嗚В).,浠諱綍閫氳繃綾誨悕鏉ヨ皟鐢,閮藉彲浠ユ敼鍙樺叾鍊.

鍏充簬闈欐佹柟娉(閫氳繃綾諱駭鐢熺殑瀵硅薄)璋冪敤闈欐佹柟娉,璋冪敤闈為潤鎬佹柟娉(閫氳繃綾誨悕鎴栭兘鏄瀵硅薄璋冪敤)閮芥槸鍙浠ョ殑,浣嗘槸,闈欐佹柟娉曞彲浠ヨ皟鐢ㄩ潤鎬佸彉閲忚屼笉鍙浠ヨ皟鐢ㄩ潪闈欐佸彉閲(Error(12,30): non-static variable a cannot be referenced from a static context)

浠ヤ笅鏄痶hinking in java 閲岄潰鐨勫叧浜巗tatic 鐨勬弿榪:

2.6.3 static鍏抽敭瀛
閫氬父錛屾垜浠鍒涘緩綾繪椂浼氭寚鍑洪偅涓綾葷殑瀵硅薄鐨勫栬備笌琛屼負銆傞櫎闈炵敤new鍒涘緩閭d釜綾葷殑涓涓瀵硅薄錛屽惁鍒欏疄闄呬笂騫舵湭寰楀埌浠諱綍涓滆タ銆(娉ㄦ剰,榪欓噷鍏跺疄灝辨槸璇寸殑寮曠敤鍜岀湡姝g殑瀵硅薄鍒涘緩闂棰)鍙鏈夋墽琛屼簡new鍚庯紝鎵嶄細姝e紡鐢熸垚鏁版嵁瀛樺偍絀洪棿錛屽苟鍙浣跨敤鐩稿簲鐨勬柟娉曘
浣嗗湪涓ょ嶇壒孌婄殑鎯呭艦涓嬶紝涓婅堪鏂規硶騫朵笉鍫鐢ㄣ備竴縐嶆儏褰㈡槸鍙鎯崇敤涓涓瀛樺偍鍖哄煙鏉ヤ繚瀛樹竴涓鐗瑰畾鐨勬暟鎹鈥斺旀棤璁鴻佸壋寤哄氬皯涓瀵硅薄錛岀敋鑷蟲牴鏈涓嶅壋寤哄硅薄銆傚彟涓縐嶆儏褰㈡槸鎴戜滑闇瑕佷竴涓鐗規畩鐨勬柟娉曪紝瀹冩病鏈変笌榪欎釜綾葷殑浠諱綍瀵硅薄鍏寵仈銆備篃灝辨槸璇達紝鍗充嬌娌℃湁鍒涘緩瀵硅薄錛屼篃闇瑕佷竴涓鑳借皟鐢ㄧ殑鏂規硶銆備負婊¤凍榪欎袱鏂歸潰鐨勮佹眰錛屽彲浣跨敤static錛堥潤鎬侊級鍏抽敭瀛椼備竴鏃﹀皢浠涔堜笢瑗胯句負static錛屾暟鎹鎴栨柟娉曞氨涓嶄細鍚岄偅涓綾葷殑浠諱綍瀵硅薄瀹炰緥鑱旂郴鍒頒竴璧楓傛墍浠ュ敖綆′粠鏈鍒涘緩閭d釜綾葷殑涓涓瀵硅薄錛屼粛鑳借皟鐢ㄤ竴涓猻tatic鏂規硶錛屾垨璁塊棶涓浜泂tatic鏁版嵁銆傝屽湪榪欎箣鍓嶏紝瀵逛簬闈瀞tatic鏁版嵁鍜屾柟娉曪紝鎴戜滑蹇呴』鍒涘緩涓涓瀵硅薄錛屽苟鐢ㄩ偅涓瀵硅薄璁塊棶鏁版嵁鎴栨柟娉曘傝繖鏄鐢變簬闈瀞tatic鏁版嵁鍜屾柟娉曞繀欏葷煡閬撳畠浠鎿嶄綔鐨勫叿浣撳硅薄銆傚綋鐒訛紝鍦ㄦe紡浣跨敤鍓嶏紝鐢變簬static鏂規硶涓嶉渶瑕佸壋寤轟換浣曞硅薄錛屾墍浠ュ畠浠涓嶅彲綆鍗曞湴璋冪敤鍏朵粬閭d簺鎴愬憳錛屽悓鏃朵笉寮曠敤涓涓宸插懡鍚嶇殑瀵硅薄錛屼粠鑰岀洿鎺ヨ塊棶闈瀞tatic鎴愬憳鎴栨柟娉曪紙鍥犱負闈瀞tatic鎴愬憳鍜屾柟娉曞繀欏誨悓涓涓鐗瑰畾鐨勫硅薄鍏寵仈鍒頒竴璧鳳級銆
鏈変簺闈㈠悜瀵硅薄鐨勮璦浣跨敤浜"綾繪暟鎹"鍜"綾繪柟娉"榪欎袱涓鏈璇銆傚畠浠鎰忓懗鐫鏁版嵁鍜屾柟娉曞彧鏄涓轟綔涓轟竴涓鏁翠綋鐨勭被鑰屽瓨鍦ㄧ殑錛屽苟涓嶆槸涓洪偅涓綾葷殑浠諱綍鐗瑰畾瀵硅薄銆傛湁鏃訛紝鎮ㄤ細鍦ㄥ叾浠栦竴浜汮ava涔﹀垔閲屽彂鐜拌繖鏍風殑縐板懠銆
涓轟簡灝嗘暟鎹鎴愬憳鎴栨柟娉曡句負static錛屽彧闇鍦ㄥ畾涔夊墠緗鍜岃繖涓鍏抽敭瀛楀嵆鍙銆備緥濡傦紝涓嬭堪浠g爜鑳界敓鎴愪竴涓猻tatic鏁版嵁鎴愬憳錛屽苟瀵瑰叾鍒濆嬪寲錛

class StaticTest {
Static int i = 47;
}

鐜板湪錛屽敖綆℃垜浠鍒朵綔浜嗕袱涓猄taticTest瀵硅薄錛屼絾瀹冧滑浠嶇劧鍙鍗犳嵁StaticTest.i鐨勪竴涓瀛樺偍絀洪棿銆傝繖涓や釜瀵硅薄閮藉叡浜鍚屾牱鐨剗銆傝瘋冨療涓嬭堪浠g爜錛
StaticTest st1 = new StaticTest();
StaticTest st2 = new StaticTest();
姝ゆ椂錛屾棤璁簊t1.i榪樻槸st2.i閮芥湁鍚屾牱鐨勫47錛屽洜涓哄畠浠寮曠敤鐨勬槸鍚屾牱鐨勫唴瀛樺尯鍩熴
鏈変袱涓鍔炴硶鍙寮曠敤涓涓猻tatic鍙橀噺銆傛e備笂闈㈠睍紺虹殑閭f牱錛屽彲閫氳繃涓涓瀵硅薄鍛藉悕瀹冿紝濡俿t2.i銆備害鍙鐩存帴鐢ㄥ畠鐨勭被鍚嶅紩鐢錛岃岃繖鍦ㄩ潪闈欐佹垚鍛橀噷鏄琛屼笉閫氱殑錛堟渶濂界敤榪欎釜鍔炴硶寮曠敤static鍙橀噺錛屽洜涓哄畠寮鴻皟浜嗛偅涓鍙橀噺鐨"闈欐"鏈璐錛夈
StaticTest.i++;
鍏朵腑錛++榪愮畻絎︿細浣垮彉閲忓炲箋傛ゆ椂錛屾棤璁簊t1.i榪樻槸st2.i鐨勫奸兘鏄48銆
綾諱技鐨勯昏緫涔熼傜敤浜庨潤鎬佹柟娉曘傛棦鍙璞″瑰叾浠栦換浣曟柟娉曢偅鏍烽氳繃涓涓瀵硅薄寮曠敤闈欐佹柟娉曪紝浜﹀彲鐢ㄧ壒孌婄殑璇娉曟牸寮"綾誨悕.鏂規硶()"鍔犱互寮曠敤銆傞潤鎬佹柟娉曠殑瀹氫箟鏄綾諱技鐨勶細
class StaticFun {
static void incr() { StaticTest.i++; }
}
浠庝腑鍙鐪嬪嚭錛孲taticFun鐨勬柟娉昳ncr()浣塊潤鎬佹暟鎹甶澧炲箋傞氳繃瀵硅薄錛屽彲鐢ㄥ吀鍨嬬殑鏂規硶璋冪敤incr()錛
StaticFun sf = new StaticFun();
sf.incr();
鎴栬咃紝鐢變簬incr()鏄涓縐嶉潤鎬佹柟娉曪紝鎵浠ュ彲閫氳繃瀹冪殑綾葷洿鎺ヨ皟鐢錛
StaticFun.incr();
灝界℃槸"闈欐"鐨勶紝浣嗗彧瑕佸簲鐢ㄤ簬涓涓鏁版嵁鎴愬憳錛屽氨浼氭槑紜鏀瑰彉鏁版嵁鐨勫壋寤烘柟寮忥紙涓涓綾諱竴涓鎴愬憳錛屼互鍙婃瘡涓瀵硅薄涓涓闈為潤鎬佹垚鍛橈級銆傝嫢搴旂敤浜庝竴涓鏂規硶錛屽氨娌℃湁閭d箞鎴忓墽鍖栦簡銆傚規柟娉曟潵璇達紝static涓欏歸噸瑕佺殑鐢ㄩ斿氨鏄甯鍔╂垜浠鍦ㄤ笉蹇呭壋寤哄硅薄鐨勫墠鎻愪笅璋冪敤閭d釜鏂規硶銆傛e備互鍚庝細鐪嬪埌鐨勯偅鏍鳳紝榪欎竴鐐規槸鑷沖叧閲嶈佺殑鈥斺旂壒鍒鏄鍦ㄥ畾涔夌▼搴忚繍琛屽叆鍙f柟娉昺ain()鐨勬椂鍊欍
鍜屽叾浠栦換浣曟柟娉曚竴鏍鳳紝static鏂規硶涔熻兘鍒涘緩鑷宸辯被鍨嬬殑鍛藉悕瀵硅薄銆傛墍浠ョ粡甯告妸static鏂規硶浣滀負涓涓"棰嗗ご緹"浣跨敤錛岀敤瀹冪敓鎴愪竴緋誨垪鑷宸辯被鍨嬬殑"瀹炰緥"銆

浠ヤ笅鏄鎴戠殑嫻嬭瘯紼嬪簭:

<pre>

package moonsoft.test.testDataStructure;

public class TestDriver
{
public TestDriver()
{
}
public static void main(String []args)
{
TestDriver td=new TestDriver();
String month=td.monthName(3);//閫氳繃瀵硅薄璋冪敤static method,涓嶅緩璁浣跨敤
month=TestDriver.monthName(4);//鏍囧噯鐨勮皟鐢╯tatic method
String month1=td.monthName1(3);//閫氳繃瀵硅薄璋冪敤闈瀞tatic method
month1=TestDriver.monthName1(4);
/*涓嶉氳繃瀵硅薄璋冪敤闈瀞tatic method:
* Error(14,23): non-static method monthName1(int) cannot be referenced from a static context*/
System.out.println(month+a);//闈欐佹柟娉曡皟鐢ㄩ潤鎬佸彉閲
System.out.println(month1+a);//闈欐佹柟娉曡皟鐢ㄩ潤鎬佸彉閲
System.out.println(month+a1);
/*闈欐佹柟娉曡皟鐢ㄩ潪闈欐佸彉閲
*Error(17,30): non-static variable a1 cannot be referenced from a static context*/

}
public static String monthName(int month)//static method
{
switch ( month)
{
case 1: return "Jan";
case 2: return "Feb";
case 3: return "Mar";
case 4: return "Apr";
case 5: return "May";
case 6: return "Jun";
default: return "others";

}
}
public String monthName1(int month)//not a static method
{
switch ( month)
{
case 1: return "Jan";
case 2: return "Feb";
case 3: return "Mar";
case 4: return "Apr";
case 5: return "May";
case 6: return "Jun";
default: return "others";

}
}
public static int add(int t)
{
int s=t;
s++;
return s;
}
public static double a;
public double a1;

}</pre>
鍏跺疄寰堢畝鍗,闅忛亶鍐欏嚭涓涓紼嬪簭嫻嬭瘯涓涓嬪氨濂戒簡,澶磋剳閲屼竴瀹氳佹竻妤氬湴鐭ラ亾闈欐佺┒絝熸槸鎬庝箞鍥炰簨.

閱讀全文

與java抽象靜態方法相關的資料

熱點內容
主力吸籌派發區域指標源碼 瀏覽:695
單片機pc的低位元組怎麼算 瀏覽:230
pythoneval函數源碼 瀏覽:242
linuxmongodb服務啟動 瀏覽:766
在哪裡下載核酸檢測app 瀏覽:310
esxi啟動虛擬機命令 瀏覽:969
軍工級單片機 瀏覽:113
伺服器安全保護是什麼意思 瀏覽:789
刪除運行命令 瀏覽:720
龍之召喚伺服器如何 瀏覽:119
linux目錄跳轉 瀏覽:368
程序員和老闆稱兄道弟 瀏覽:759
直播網路連接源碼 瀏覽:736
用安卓手機怎麼登錄蘋果手機id 瀏覽:710
論文查重工具源碼 瀏覽:401
android銀聯demo 瀏覽:86
智能演算法發展 瀏覽:351
房車露營地用什麼app 瀏覽:70
spark編程指南python 瀏覽:553
phparray源碼 瀏覽:1002