導航:首頁 > 編程語言 > java介面變數抽象類引用調用

java介面變數抽象類引用調用

發布時間:2025-06-25 23:25:07

java:一個類實現某個介面的時候可不可以只實現這個介面中的部分方法,還是必須實現介面中的全部方法呢

不一定,關鍵要看子類是否是抽象類。
如果子類是非抽象類,則必須實現介面中的所有方法;
如果子類是抽象類,則可以不實現介面中的所有方法,因為抽象類中允許有抽象方法的存在!
1、抽象類定義
抽象類往往用來表徵對問題領域進行分析、設計中得出的抽象概念,是對一系列看上去不同,但是本質上相同的具體概念的抽象。通常在編程語句中用 abstract 修飾的類是抽象類。在C++中,含有純虛擬函數的類稱為抽象類,它不能生成對象;在java中,含有抽象方法的類稱為抽象類,同樣不能生成對象。抽象類是不完整的,它只能用作基類。在面向對象方法中,抽象類主要用來進行類型隱藏和充當全局變數的角色。
2、抽象類特點
1)抽象類不能實例化。
2)抽象類可以包含抽象方法和抽象訪問器。
3)不能用 sealed 修飾符修飾抽象類,因為這兩個修飾符的含義是相反的。 採用 sealed 修飾符的類無法繼承,而 abstract 修飾符要求對類進行繼承。
4)從抽象類派生的非抽象類必須包括繼承的所有抽象方法和抽象訪問器的實際實現。
3、與具體類的比較

1)抽象類不能直接實例化,並且對抽象類使用 new 運算符會導致編譯時錯誤。雖然一些變數和值在編譯時的類型可以是抽象的,但是這樣的變數和值必須或者為 null,或者含有對非抽象類的實例的引用(此非抽象類是從抽象類派生的)。
2)允許(但不要求)抽象類包含抽象成員。
3)抽象類不能被密封。
4、與介面的比較
1)相同點

a、不能實例化;
b、包含未實現的方法聲明;
c、派生類必須實現未實現的方法,抽象類是抽象方法,介面則是所有成員(不僅是方法包括其他成員)
2)不同點

a、類可以實現無限個介面,但僅能從一個抽象(或任何其他類型)類繼承,從抽象類派生的類仍可實現介面,從而得出介面是用來解決多重繼承問題的。
b、抽象類當中可以存在非抽象的方法,可介面不能,且它裡面的方法只是一個聲明必須用public來修飾沒有具體實現的方法。
c、抽象類中的成員變數可以被不同的修飾符來修飾,可介面中的成員變數默認的都是靜態常量(static final)。
d、抽象類是對象的抽象,然而介面是一種行為規范。

㈡ java中abstract怎麼使用啊,說的詳細點。舉幾個有代表的例子

使用abstract(抽象)修飾符,可以修飾類和方法。

1、abstract修飾類,會使這個類成為一個抽象類,這個類將不能生成對象實例,但可以做為對象變數聲明的類型,也就是編譯時類型,抽象類就像當於一類的半成品,需要子類繼承並覆蓋其中的抽象方法。

2、abstract修飾方法,會使這個方法變成抽象方法,也就是只有聲明(定義)而沒有實現,實現部分以";"代替。需要子類繼承實現(覆蓋)。

注意:有抽象方法的類一定是抽象類。但是抽象類中不一定都是抽象方法,也可以全是具體方法。

abstract修飾符在修飾類時必須放在類名前。

abstract修飾方法就是要求其子類覆蓋(實現)這個方法。調用時可以以多態方式調用子類覆蓋(實現)後的方法,也就是說抽象方法必須在其子類中實現,除非子類本身也是抽象類。

注意:父類是抽象類,其中有抽象方法,那麼子類繼承父類,並把父類中的所有抽象方法都實現(覆蓋)了,子類才有創建對象的實例的能力,否則子類也必須是抽象類。抽象類中可以有構造方法,是子類在構造子類對象時需要調用的父類(抽象類)的構造方法。

舉個簡單的例子下面有一個抽象類:

abstract class E{

public abstract void show();//public abstract 可以省略

}

然後其它類如果繼承它通常為了實現它裡面的方法:

class F extends E{

void show(){

//寫具體實現的代碼

}

}

最後再主方法裡面定義一個父類引用指向子類對象,就會發生多態現象,比如 :

E e=new F();

e.show();

實際調用了子類裡面的show()方法 。

(2)java介面變數抽象類引用調用擴展閱讀:

Java中的abstract方法和abstract類的問題:

當知道一個類的子類將不同的實現某個方法時,把該類聲明為抽象類很有用,可以共用相同的父類方法,不必再定義。

抽象類和抽象方法的關系:含有抽象方法的類一定是抽象類,抽象類里不一定含有抽象方法。

抽象類存在的意義是用來被繼承的。一個類繼承了一個抽象類,必須實現抽象類裡面所有的抽象方法,否則,此類也是抽象類。

1:用abstract修飾的類表示抽象類,抽象類位於繼承樹的抽象層,抽象類不能被實例化。

2:用abstract修飾的方法表示抽象方法,抽象方法沒有方法體。抽象方法用來描述系統具有什麼功能,但不提供具體的實現。

abstract的規則:

1:抽象類可以沒有抽象方法,但是有抽象方法的類必須定義為抽象類,如果一個子類繼承一個抽象類,子類沒有實現父類的所有抽象方法,那麼子類也要定義為抽象類,否則的話編譯會出錯的。

2:抽象類沒有構造方法,也沒有抽象靜態方法。但是可以有非抽象的構造方法。

3:抽象類不能被實例化,但是可以創建一個引用變數,類型是一個抽象類,並讓它引用非抽象類的子類的一個實例。

4:不能用final 修飾符修飾。

㈢ java 介面怎麼用應該怎麼實現

java語言不支持一個類有多個直接的父類(多繼承),但可以實現(implements)多個介面,間接的實現了多繼承
用法public class test implements 介面名稱
當類實現了某個Java介面時,它必須實現介面中的所有抽象方法,否則這個類必須聲明為抽象的

比較抽象類與介面
1, 抽象類與介面都位於繼承樹的上層
相同點
1, 代表系統的抽象層,當一個系統使用一顆繼承樹上的類時,應該盡量把引用變數聲明為繼承樹的上層抽象類型,這樣可以提高兩個系統之間的送耦合
2, 都不能被實例化
3, 都包含抽象方法,這些抽象方法用於描述系統能提供哪些服務,但不提供具體的實現
不同點:
1, 在抽象類中可以為部分方法提供默認的實現,從而避免在子類中重復實現它們,這是抽象類的優勢,但這一優勢限制了多繼承,而介面中只能包含抽象方法.由於在抽象類中允許加入具體方法,因此擴展抽象類的功能,即向抽象類中添加具體方法,不會對它的子類造成影響,而對於介面,一旦介面被公布,就必須非常穩定,因為隨意在介面中添加抽象方法,會影響到所有的實現類,這些實現類要麼實現新增的抽象方法,要麼聲明為抽象類
2, 一個類只能繼承一個直接的父類,這個父類可能是抽象類,但一個類可以實現多個介面,這是介面的優勢,但這一優勢是以不允許為任何方法提供實現作為代價的三, 為什麼Java語言不允許多重繼承呢?當子類覆蓋父類的實例方法或隱藏父類的成員變數及靜態方法時,Java虛擬機採用不同的綁定規則,假如還允許一個類有多個直接的父類,那麼會使綁定規則更加復雜,
因此,為了簡化系統結構設計和動態綁定機制,Java語言禁止多重繼承.而介面中只有抽象方法,沒有實例變數和靜態方法,只有介面的實現類才會實現介面的抽象方法(介面中的抽象方法是通過類來實現的),因此,一個類即使有多個介面,也不會增加Java虛擬機進行動態綁定的復雜度.因為Java虛擬機永遠不會把方法與介面綁定,而只會把方法與它的實現類綁定.四, 使用介面和抽象類的總體原則:
1, 用介面作為系統與外界交互的窗口站在外界使用者(另一個系統)的角度,介面向使用者承諾系統能提供哪些服務,站在系統本身的角度,介面制定系統必須實現哪些服務,介面是系統中最高層次的抽象類型.通過介面交互可以提高兩個系統之間的送耦合系統A通過系統B進行交互,是指系統A訪問系統B時,把引用變數聲明為系統B中的介面類型,該引用變數引用系統B中介面的實現類的實例。
public interface B
{
}
public class C implements B
{
}
public class A
{
}
B a = new C();
2, Java介面本身必須非常穩定,Java介面一旦制定,就不允許隨遇更加,否則對外面使用者及系統本身造成影響
3, 用抽象類來定製系統中的擴展點
抽象類來完成部分實現,還要一些功能通過它的子類來實現

㈣ 誰知道Java中的介面是指什麼

一、什麼是介面
java介面(Interface),是一系列方法的聲明,是一些方法特徵的集合,一個介面只有方法的特徵沒有方法的實現,因此這些方法可以在不同的地方被不同的類實現,而這些實現可以具有不同的行為(功能)。

二、java中介面定義的一般形式:
[訪問控制符]interface <介面名> {
類型標識符final 符號常量名n = 常數;
返回值類型 方法名([參數列表])
}

下面我們例舉了幾種定義介面的方法:
方法一:
interface B {
//coding here !
}
public interface A extends B{
//coding here !
}

方法二:
abstract class C{
public C(){
}
}
abstract class D extends C{
public D(){
super();
}
}

方法三:
public interface A {
//coding here !
}

abstract class C implements A{
public C(){
}
}

方法四:
interface B {
//coding here !
}
public interface A extends B{
//coding here !
}

abstract class C implements A{
public C(){
}
}
class D extends C{
public D(){
super();
}
}

二、介面的特點
1、Java介面中的成員變數默認都是public,static,final類型的(都可省略),必須被顯示初始化,即介面中的成員變數為常量(大寫,單詞之間用"_"分隔)
2、Java介面中的方法默認都是public,abstract類型的(都可省略),沒有方法體,不能被實例化
3、Java介面中只能包含public,static,final類型的成員變數和public,abstract類型的成員方法
4、介面中沒有構造方法,不能被實例化
5、一個介面不能實現(implements)另一個介面,但它可以繼承多個其它的介面
6、Java介面必須通過類來實現它的抽象方法
7、當類實現了某個Java介面時,它必須實現介面中的所有抽象方法,否則這個類必須聲明為抽象類
8、不允許創建介面的實例(實例化),但允許定義介面類型的引用變數,該引用變數引用實現了這個介面的類的實例
9、一個類只能繼承一個直接的父類,但可以實現多個介面,間接的實現了多繼承.
這些都是Java的基礎知識你可以去一個叫做秒秒學的網站學習相關內容

閱讀全文

與java介面變數抽象類引用調用相關的資料

熱點內容
ios6越獄後舊版本軟體 瀏覽:146
電腦桌面移動到新建文件夾打不開 瀏覽:515
手機文件管理閃退 瀏覽:977
鴻蒙圖片相冊的文件夾在哪裡 瀏覽:900
龍門銑床編程亂了怎麼辦 瀏覽:29
sdcard文件在哪裡打開vivo8 瀏覽:218
甘肅銀行app如何定期轉活期 瀏覽:125
添加文件夾到微信 瀏覽:464
ug編程模塊怎麼定製 瀏覽:276
歌曲的緩存文件在哪裡 瀏覽:501
蘋果6屏幕顫抖 瀏覽:338
大數據和電商如何與鄉村振興結合 瀏覽:151
三星升級後能不能降級 瀏覽:807
m12螺紋多大怎麼編程 瀏覽:161
怎樣在郵箱里發文件夾 瀏覽:914
win8右鍵新建沒有word 瀏覽:589
如何判斷資料庫失敗 瀏覽:898
word文檔怎麼傳到手機文件 瀏覽:558
怎麼改音樂文件格式 瀏覽:756
如何寫個簡單的編程語言 瀏覽:728

友情鏈接