① java中的介面怎麼實現
舉個面積的例子:在java中,定義一個介面,聲明計算長方形面積和周長的抽象方法,再用一個類去實現這個介面,再編寫一個測試類去使用這個介面。首先,介面必須單獨存放,如果我們用eclipse編程的話,它們提示:The public type **** must be defined in its own file,意思是必須要定義在其自己的文件中,所以要為介面文件單獨存放起來,舉例,我們的介面要實現獲到矩形的長,寬,面積,周長,所以定義以下的介面。public interface calrect {
public abstract int calarea();
public abstract int calgirth();
public abstract int getx();
public abstract int gety();
}注意,定義介面就像定義類一樣,介面的訪問控制符只能用public,用public定義的介面可以被所有的類和包引用,而預設的則只能被同一個包中的其他類和介面引用,這符合JAVA中訪問控制符的一般要求,關於介面再引用其他介面則是後話。以上介面文件名為calrect.java.另外需要指出的是介面中不能給方法給出方法體。接下來,需要定義一個類來實現介面,因為不知道JAVA的內置矩形類是什麼名,所以為了安全,將該類定義為RRect,這可以認為是一種安全策略。關於implements,可以參考其他資料。該類引用了介面calrect,所以必須對calrect中的方法一一實現。//定義矩形類 應用介面class RRect implements calrect{private int x;
private int y;public RRect (){
x=3;y=4;
}
public int calarea(){
return x*y;
}
public int calgirth(){
return x*2+y*2;
}
public int getx(){
return x;
}
public int gety(){
return y;
}
}//接下來,定義一個測試類,所謂測試類,我理解為定義一個類,在其定義類RRect的對象,並驗證其中的方法,看看是不是可以正常使用//定義Class1類
public class Class1{
RRect rect;
public static void main(String []args){
RRect rect=new RRect();
System.out.println("矩陣的長"+ rect.getx());
System.out.println("矩陣的寬"+ rect.calarea());
System.out.println("矩陣的面積"+ rect.calarea());
System.out.println("矩形的周長 "+rect.calgirth());
}
}運行結果:矩陣的長3
矩陣的寬12
矩陣的面積12
矩形的周長 14註:介面單存放,介面實現類和測試類可以存放在一個文件中
② 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中,實現一個介面的類,必須實現這個介面的全部方法嗎
一般類必須全部實現,
抽象類
可以只實現一部分方法。
④ 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 介面怎麼用應該怎麼實現
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 類實現介面方法
public class Aircraft implements Vehicle{
private int speed;
public Aircraft(){}
public void setSpeed(int speed){
this.speed=speed;
}
public int getSpeed(){
return this.speed;
}
public void start(int speed){
setSpeed(speed);
}
public void stop(){
this.speed=0;
}
}
Bus同上。
希望對你有所幫助。。。
⑦ java的常用介面有哪些
常用介面種類,具體如下。
1.java.lang.String
String類無可爭議的獲得冠軍,應該沒有人會否認這一點,這是一個最終類,用於創建/操作不可變的字元串文字。
2.java.lang.System
System類的使用取決於你工作的項目類型,你可能沒有在項目中使用過它,但它仍然是受歡迎的Java類之一,這是一個不能被實例化的工具類。
這個類的主要用途是訪問標准輸入、輸出、環境變數等等。
3.java.lang.Exception
Throwable是所有錯誤和異常的超類,所有異常情況的處理都屬於Exception類。
NullPointerException在所有的異常中是最受歡迎的,而Exception異常是在所有異常層次結構的頂部。
4.java.util.ArrayList
一個實現數組的數據結構的類。這個類實現了List介面,是最受歡迎的Java集合類的成員,Arr
ayList和Vector之間的差異是初學者常見的問題之一,它也經常在java面試中被問到。
5.ava.util.HashMap
一個實現鍵值對數據結構的類,這個類實現了Map介面,類似比較ArrayList與Vector,Hash
Map與Hashtable也是經常拿來比較的。
它也是一個受歡迎的集合類,作為一個屬性-值的容器,經常用在應用程序多個層之間的數據傳遞。
6.java.lang.Object
所有Java類的根類,每一個Java類都是Object類的一個子類,經常使用在平台/框架上。
它包含了一些重要方法,比如:equals,
hashcode,
clone,
toString等等。它自從Java誕生的第一天開始可用。
7.java.lang.Thread
線程是一個單一執行的序列,多個線程可以共同存在,共享資源,我們可以擴展Thread類,並創建自己的線程。
當然,使用Runnable也是另一種選擇,是否使用這個類取決於你的應用程序的需要,一個普通的應用程序是完全沒有必要使用線程的。
8.java.lang.Class
Class類是一個直接繼承Object類的子類,這個類沒有構造函數,它們的對象是被Java虛擬機通過類載入器載入的。
我們大多數人可能沒有直接使用過它,但我認為它是一個重要的做反射的類。
9.java.util.Date
這是用來處理日期的類,有時候,我們覺得這個類應該加入更多的實用方法,就像每個企業級應用程序都會創建一個日期的實用工具單元。
它自JDK
1.0開始引入,後來在JDK1.1中發生巨大變化,棄用了一大堆的方法。
10.java.util.Iterator
這是一個介面,它很受歡迎,用來替換枚舉,這是一個簡單易用的單元,它用Iterable同步工作。
⑧ java 實現介面必須要實現所有函數嗎
如果用普通的類來實現則要實現所有函數,但是也可以用抽象類實現部分函數,甚至使用抽象類一個函數都不實現。
⑨ JAVA:一個類實現多個介面
//A介面interface A{
public int getA();
}
//B介面
interface B{
public int getB();
}
//實現了某個介面必須實現其全部的方法
public class ImpAB implements A,B{
public int getA() {
return 0;
}
public int getB() {
return 0;
}
}
(9)java實現介面的所有擴展閱讀:
功能
在Java語言規范中,一個方法的特徵僅包括方法的名字,參數的數目和種類,而不包括方法的返回類型,參數的名字以及所拋出來的異常。
在Java編譯器檢查方法的重載時,會根據這些條件判斷兩個方法是否是重載方法。但在Java編譯器檢查方法的置換時,則會進一步檢查兩個方法(分處超類型和子類型)的返還類型和拋出的異常是否相同。
介面實現和類繼承的規則不同,為了數據的安全,繼承時一個類只有一個直接父類,也就是單繼承,但是一個類可以實現多個介面,介面彌補了類的不能多繼承缺點,繼承和介面的雙重設計既保持了類的數據安全也變相實現了多繼承。
Java介面本身沒有任何實現,因為Java介面不涉及表象,而只描述public行為,所以Java介面比Java抽象類更抽象化。但是介面不是類,不能使用new 運算符實例化一個介面。
Java介面的方法只能是抽象的和公開的,Java介面不能有構造器,Java介面可以有public、static和final屬性。即介面中的屬性可以定義為 public static final int value=5。
介面把方法的特徵和方法的實現分割開來。這種分割體現在介面常常代表一個角色,它包裝與該角色相關的操作和屬性,而實現這個介面的類便是扮演這個角色的演員。一個角色由不同的演員來演,而不同的演員之間除了扮演一個共同的角色之外,並不要求其它的共同之處。
⑩ java里實現一個介面的類必須要實現介面里的所有方法嗎
實現介面或繼承抽象類的子類必須實現介面的所有方法或抽象類的所有抽象方法。