抽象類和介面
一、抽象類
定義
由於並不是所有物件都可以通過類去描述。如果一個類中沒有包含足夠的資訊去描述一個物件,這樣的類就是抽象類。用關鍵字abstract修飾,抽象類是一種沒有完全實現的類。不能用它來例項化物件,它的主要用途是用來描述一些概念性的內容,然後在子類中去具體實現這些概念,一般抽象類都是作為其他類的父類。
- abstract修飾的類就叫做抽象類
- abstart修飾的方法就叫做抽象方法
- 如何去定義一個抽象類:
public void fun(){//普通方法 System.out.println("存在方法體的方法"); } public abstract void print();//抽象方法,沒有方法體,有abstract關鍵字做修飾 }
特點
1)抽象類不能例項化物件 不能使用new操作符建立物件。
2)抽象類的其他功能都與普通類一樣。
3)抽象類中可以定義構造器,但是不可以用來例項化物件,只能
在子類中使用,所以該構造器一般定義為protected。
4)一個抽象類可以定義普通方法,但是含有普通方法+抽象方法的類必須定義為抽象類。
二、介面
定義
Java介面是一系列方法的宣告,是一些方法特徵的集合,一個介面只有方法的特徵沒有方法的實現,因此這些方法可以在不同的地方被不同的類實現,而這些實現可以具有不同的行為(功能)。
介面的定義:
interface interfaceName{
int index; //public static final (final(常量 編譯時期就能夠確定它的值))
void func(); //只能有方法的宣告而不能存在方法的實現 public
}
特點
java介面中的成員變數預設都是public,static,final(都可省略)型別的,必須被顯示的初始化。成員方法預設都是public ,abstract 型別的,不能含有static方法。沒有方法體,java中沒有建構函式,不能例項化。
一個介面不能實現(implement)另一個介面,但可以繼承多個其他介面。
java介面必須通過類來實現它的抽象方法。
當類實現了某個java介面時,必須實現介面中的所有抽象方法,否則這個類必須宣告為抽象的。
使用介面時的注意事項
1)不能夠new建立物件
2)如果要去建立一個介面對應的物件,則需要通過它的具體實現類,
使用implements關鍵字去實現介面
3) 介面被編譯之後也會產生對應的位元組碼檔案
4)介面之間也是可以相互繼承 extends
5) 介面對應是多實現 eg.class C implements A,B
6) 抽象類中設定的都是通用的方法,功能與實體都是一種"是"的關係,
介面中功能與實體都是一種"有"的關係
7)介面中定義的屬性為什麼是static final的?
static 原因主要是介面的實現是多實現,為了區分不同介面當中的相同變數
final 原因是因為如果是變數,介面的存在就失去其意義,同時介面來說指的
*是統一的協議,Java設計者直接規定介面中的屬性只能是public static
final的
8)Jdk1.8引入的新特性:
a.引入了default關鍵字提供預設介面方法,一個預設介面方法可以有預設的
實現
作用如下:
幫助擴充套件介面,而不需要破壞實現類
介面和抽象類之間差異更小一點
實現類可以自己決定覆蓋哪個預設方法實現
為了支援lambda表示式
b.允許介面中存在靜態的公有方法
作用:
可以用於提供一些合法性檢查的邏輯
靜態方法不允許類重寫,重寫就會被覆蓋,更加安全
比較器介面
如果需要讓一個類中物件可比較,則當前的類必須要實現
Comparable介面,重寫compareTo方法,使得當前類對
象按照compareTo方法中邏輯進行比較
缺點:如果要更換比較邏輯,則需要修改原類
jdk1.8 比較器介面 Comparator 不用修改原類,用來實現單獨的比較器
抽象類和介面的區別
抽象類和介面的區別
1)外觀 抽象類用到abstract關鍵字修飾一個class類,表示抽象類;
介面使用interface關鍵字;抽象類中可以定義抽象方法也可以定義普通的
成員方法,介面中的方法jdk1.8之前只有方法的宣告沒有方法的實現,而
jdk1.8之後可以定義default預設實現的方法,也可以定義static靜態方法;
抽象類中可以定義任意變數、常量,介面中只能定義public static final
常量;抽象類使用extends關鍵字去繼承,繼承只能是單繼承,介面使用
implements關鍵字去實現,實現可以是多個實現
2)使用 抽象類和介面本身不能使用new操作符建立一個物件,抽象類中可以定義
構造方法的,介面中不能定義構造方法,抽象類中可以定義構造方法,構造方法一般
是protected修飾的,因為其構造方法的定義是為了方便子類所使用;抽象類和
介面中的抽象方法不能夠是private,如果是private子類則無法實現該方法
3)個人見解 抽象類是一種"是"的關係,介面是一種"含有"的關係,實現這個介面
就會含有這個功能,抽象類則是一種高度的概括,其中會定義一些通用的方法;
介面可以有多個實現, 所以靈活性和擴充套件性方面,介面會更強一些
課後練習
使用介面作為引數,實現一個計算器,包含+,-,*,/
interface Compute{
int calculate(int num1, int num2);
}
class Addition implements Compute{
public int calculate(int num1, int num2){
return num1+num2;
}
}
class subTraction implements Compute{
public int calculate(int num1,int num2){
return num1-num2;
}
}
class multiplication implements Compute{
public int calculate(int num1,int num2){
return num1*num2;
}
}
class divisionMethod implements Compute{
public int calculate(int num1,int num2){
if(num2==0){
System.out.println("分母不能為空");
return 0;
}else {
return num1/num2;
}
}
}
class Use{
public void Calculate(Compute cal,int num1,int num2){
System.out.println(cal.calculate(num1,num2));
}
}
public class Calculator {
public static void main(String[] args) {
Use c=new Use();
c.Calculate(new Addition(),2,2);
c.Calculate(new subTraction(),2,2);
c.Calculate(new multiplication(),2,2);
c.Calculate(new divisionMethod(),2,2);
}
}
相關文章
- 介面和抽象類抽象
- 介面和抽象類 (abstract)抽象
- java中抽象類和介面Java抽象
- 介面和抽象類的區別抽象
- Java基礎-抽象類和介面Java抽象
- 抽象類和介面的區別抽象
- 抽象類和介面,你瞭解多少?抽象
- Java抽象(方法,類)和Java的介面Java抽象
- 抽象類與介面抽象
- 抽象類VS介面抽象
- 介面與抽象類抽象
- 抽象類和介面的相同點和不同點抽象
- java介面和抽象類的簡單理解Java抽象
- 關於抽象類和介面的初步理解抽象
- Java中抽象類和介面的區別Java抽象
- JAVA中介面和抽象類的區別Java抽象
- PHP物件和介面抽象類注意事項PHP物件抽象
- JMockit學習之mock介面和抽象類Mock抽象
- 我如何理解Java中抽象類和介面Java抽象
- 深入理解Java的介面和抽象類Java抽象
- C# OOP:繼承,介面和抽象類C#OOP繼承抽象
- Java的抽象類 & 介面Java抽象
- 抽象方法和抽象類抽象
- 抽象類和抽象方法抽象
- PHP中的 抽象類(abstract class)和 介面(interface)PHP抽象
- 結合實戰理解 Java 抽象類和介面Java抽象
- PHP 中的抽象類(abstract class)和介面(interface)PHP抽象
- Java學習筆記之介面和抽象類Java筆記抽象
- 我是如何理解Java抽象類和介面的Java抽象
- 介面和抽象類使用的一點體會抽象
- 抽象類及介面詳解抽象
- java-介面和抽象類的聯絡和區別。Java抽象
- java抽象類和抽象方法Java抽象
- 介面和抽象理解抽象
- JavaSE基礎知識學習—–抽象類和介面Java抽象
- JavaSE基礎知識學習-----抽象類和介面Java抽象
- Java 基礎鞏固:再談抽象類和介面Java抽象
- 菜鳥成長系列-多型、介面和抽象類多型抽象