⑴ java的抽象類和介面里能不能有靜態成員和靜態方法
抽象類和介面中都可以包含靜態成員變數
抽象類中可以包含靜態方法,介面內不能包含靜態方法
⑵ java中的抽象類里靜態方法以及相關調用問題,請解答!為什麼是這個結果
Father fa = new Child();
fa.add();//此處子類實現了父類的抽象方法
fa.delete();//因為父類的delete是static ,屬於父類,與實例無關,所以直接調用父類的。也就是delete已經存在內存中,可通過Father 的名稱直接調用,無需實例化Child類
fa.update();//此處子類重寫了父類的方法,用子類的。
⑶ java 中有關抽象類和類,介面
類:用class聲明,有相同屬性和行為的泛指!
屬性:就是在類中函數體外定義的變數,稱為類屬性!有默認值:基本數據類型默認值:0,引用類型默認值全是null。
抽象函數:用abstract修飾的函數叫抽象函數!
特點:抽象方法不能有方法體!
抽象類:用abstract修飾的類叫抽象類!
特點:
1:抽象類中可以有抽象函數,也可以有普通函數
2:抽象類不能被實例化對象,必須被繼承,必須重寫父類中的所有抽象函數,如果沒有重寫所有的抽象方法,那麼該類依然需要聲明為抽象類!
3:不能有抽象的構造器,可以定義普通構造器
4:不能定義靜態抽象方法!
5:抽象類中可以有main函數!
6:不能定義最終抽象類!
介面:不用class定義類,用interface定義的類
特點:
1:介面中只能定義抽象函數,不可以有普通函數!
2:介面不能被實例化對象,必須被實現implements(繼承),必須重寫父類中的所有抽象函數,如果沒有重寫所有的抽象方法,那麼該類依然需要聲明為抽象類!
3: 不能有構造器.
4:不能定義靜態抽象方法!
5:介面中不可以有main函數!
6:介面不能定義為最終介面!
7:介面中所有的函數默認全是用public abstract修飾!
8:介面中所有的屬性默認全是public static final修飾!
普通類 抽象類 介面3者之間的關系?
普通類繼承普通類
普通類繼承抽象類
普通類實現介面
抽象類繼承普通類
抽象類繼承抽象類
抽象類實現介面
介面不能繼承也不能實現普通類
介面不能繼承也不能實現抽象類
介面繼承介面
Java是單一繼承,可以通過介面實現多繼承!
Static:修飾屬性,函數,靜態代碼塊
final(最終的):修飾類,屬性,函數
修飾類(最終類):該類不能被繼承!
修飾屬性(最終屬性):在聲明時必須給初始值;最終屬性不能被改值;一般在聲明最終屬性時,屬性名為大寫!
修飾函數(最終函數):該函數不能被重寫!
⑷ JAVA中普通方法、抽象方法、構造方法等都有什麼不同和作用呢
舉例說明吧,學生是一個大類(在程序中就是class),其中的一個學生是一個對象也叫一個實體(在程序中就是我們new的一個對象),介面實際上是一個類,實現介面的類相當於是一個調用關系,抽象類也是一個類,但和介面不同,實現抽象類的類是一個繼承的關系,繼承只能繼承一個,好比只有一個父親,但是介面可以接很多個,好比usb插口,普通方法就是我們平時寫的void
int
string
等等的函數方法,如果是寫在類裡面,那麼其他地方調用需要先實例化一個對象(new一個對象)然後再按.調用出來,靜態方法就是前面加了static的方法,是使用公共內存空間的,所有對象都可以直接引用而不需要實例化一個對象再使用該方法。靜態塊的就是在類載入的時候就執行,而且是一個類在第一次被使用的時候會被載入執行(這東西不常用)。
⑸ 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抽象類中可以定義靜態的抽象方法嗎為什麼
不可以。
我是這樣理解的:抽象類是不能實例化的,即不能被分配內存,而static修飾的方法在類實例化之前就已經別分配了內存,這樣一來矛盾就出現了:抽象類不能被分配內存,而static方法必須被分配內存。所以抽象類中不能有靜態的抽象方法。
這和介面是一樣的,介面中的方法也只能是 public abstract修飾的,不能加上static。
⑺ 為什麼Java中的靜態 方法 不能是 抽象的
不可以。
我是這樣理解的:抽象類是不能實例化的,即不能被分配內存,而static修飾的方法在類實例化之前就已經別分配了內存,這樣一來矛盾就出現了:抽象類不能被分配內存,而static方法必須被分配內存。所以抽象類中不能有靜態的抽象方法。
這和介面是一樣的,介面中的方法也只能是
public
abstract修飾的,不能加上static。
⑻ java抽象類中可以定義靜態的抽象方法嗎
不可以,靜態的抽象方法只屬於 這個類, 所以別的類不能繼承。
⑼ 請分析在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抽象方法
下面是抽象方法聲明時採用的語法:abstract void f();
如果從一個抽象類繼承,而且想生成新類型的一個對象,就必須為基礎類中的所有抽象方法提供方法定義。如果不這樣做(完全可以選擇不做),則衍生類也會是抽象的,而且編譯器會強迫我們用abstract 關鍵字標志那個類的「抽象」本質。即使不包括任何abstract 方法,亦可將一個類聲明成「抽象類」。如果一個類沒必要擁有任何抽象方法,而且我們想禁止那個類的所有實例,這種能力就會顯得非常有用。
在面向對象的概念中,我們知道所有的對象都是通過類來描繪的,但是反過來卻不是這樣。並不是所有的類都是用來描繪對象的,如果一個類中沒有包含足夠的信息來描繪一個具體的對象,這樣的類就是抽象類。
抽象類往往用來表徵我們在對問題領域進行分析、設計中得出的抽象概念,是對一系列看上去不同,但是本質上相同的具體概念的抽象。比如:如果我們進行一個圖形編輯軟體的開發,就會發現問題領域存在著圓、三角形這樣一些具體概念,它們是不同的,但是它們又都屬於形狀這樣一個概念,形狀這個概念在問題領域是不存在的,它就是一個抽象概念。正是因為抽象的概念在問題領域沒有對應的具體概念,所以用以表徵抽象概念的抽象類是不能夠實例化的。在面向對象領域,抽象類主要用來進行類型隱藏。我們可以構造出一個固定的一組行為的抽象描述,但是這組行為卻能夠有任意個可能的具體實現方式。這個抽象描述就是抽象類,而這一組任意個可能的具體實現則表現為所有可能的派生類。模塊可以操作一個抽象體。由於模塊依賴於一個固定的抽象體,因此它可以是不允許修改的;同時,通過從這個抽象體派生,也可擴展此模塊的行為功能。熟悉OCP的讀者一定知道,為了能夠實現面向對象設計的一個最核心的原則OCP(Open-Closed Principle),抽象類是其中的關鍵所在。