抽象類 介面

2021-10-06 22:38:06 字數 3748 閱讀 2130

介面面試題

-有些類建立物件沒有意義。需要把這個定義為抽象類

exp:

1 animal animal=new animal();

2 pet pet=new pet()

這裡的動物類就比較抽象,該類建立物件無意義。

使用abstract修飾類變成抽象類:不能例項化,只能被繼承

抽象類的構造方法不能直接使用,只能被子類呼叫。

可以修飾方法:叫做抽象方法,沒有方法體,需要使用分號表示宣告結束,抽象方法所在的類必須是抽象類

子類必須重寫父類的抽象方法,除非子類也是抽象類

使用abstract關鍵字修飾,只表示宣告了乙個方法,但是沒有任何的實現

特點:1)沒有方法體,需要使用分號表示方法宣告結束

2)如果乙個類中有乙個方法是抽象的,那麼這個類必須是抽象的

3)抽象方法必須被子類重寫,除非子類也是抽象類

1)抽象類中可以包含抽象方法,也可以包含普通方法。

2)抽象類中有構造方法,但是不能建立物件,構造方法目的在子類中會被呼叫。

3)抽象類的存在就是為了被繼承,子類必須重寫父類的抽象方法,除非子類也是抽象類。

1)抽象類需要abstract,而普通類不需要

2)構造方法:都有,但是抽象類不能例項化物件,普通類可以

3)成員方法:抽象類中可以存在抽象的成員方法也可以存在非抽象成員方法,而普通類中只能存在非抽象成員方法

1)兩個關鍵字修飾方法時,final修飾的方法特點:可以被繼承不能被重寫;abstract修飾的方法特點:必須被重寫;所以這兩個關鍵字不能同時修飾同乙個方法

2)兩個關鍵字修飾類時:final修飾的類特點:不能被繼承;abstract修飾的類特點:必須被繼承;所以這兩個關鍵字不能同時修飾同乙個類

綜上所述:final和abstract不可以連用

final的類中能否有abstract方法?不能

abstract類中能否有final方法?可以

package com.qf.day11;

/** * 寵物類

*/public abstract class pet

//alt+shift+s --》generate constructor using field

public pet(int id, string name, int health, int love)

//setter and getter

/*** 抽象方法,沒有方法體,

* 子類必須重寫抽象方法

*/public abstract void print();

//父類的吃的方法

public void eat()

}package com.qf.day11;

public class dog extends pet

public dog(int id, string name, int health, int love,string strain)

@override

public void print()

}package com.qf.day11;

public class test

}

從語法上講:

介面是一種特殊的抽象類,這種抽象類中只包含常量和方法的定義,而沒有方法的實現。

從功能上講:介面表示一種約定或能力

擴充套件類的功能,保持對外介面一致

介面實現了多重繼承,完成類和任何實現介面子類的通訊和互動

降低**之間的耦合性

1)介面不能建立物件,而且介面中沒有構造方法;

2)介面中的方法一般都是共有抽象方法:public abstract

3)介面中所有的屬性都是共有靜態常量屬性:pulbic static final

在乙個介面中宣告方法時:

若沒有宣告訪問許可權,預設也是public,

若沒其他修飾預設也是abstract;

宣告屬性時:

若沒有宣告訪問許可權和靜態常量,預設也是public static final

語法:

public inte***ce 介面名

pulbic inte***ce i

public class impl implements i

}

必須先繼承再實現介面

public class dog extends animal implements i

}

package com.qf.day11_4;

public class test

}package com.qf.day11_4;

public class computer

if(usb2!=null)

if(usb3!=null) }}

package com.qf.day11_4;

public inte***ce usb

package com.qf.day11_4;

public class fan implements usb

}package com.qf.day11_4;

/** * 滑鼠

* */

public class mouse implements usb

}package com.qf.day11_4;

/** * u盤

* */

public class upan implements usb

}

1)jdk1.8之後介面中使用static關鍵字修飾的方法有方法體

2)jdk1.8之後介面中使用default關鍵字修飾的方法有方法體

package com.qf.day11_3;

/** * usb介面

* 包含 抽象方法

* 常量

* * 擴充套件:jdk 1.8

* 介面中可以包含 預設方法 和 靜態方法

*/public inte***ce usb

//預設方法

public default void method2()

}

語法:

1>抽象類使用abstract,介面使用inte***ce

2>抽象類中可以包含抽象方法,也可以包含非抽象方法,介面中只能包含抽象方法和靜態常量,jdk1.8之後介面可以包含靜態方法和預設方法注意同時須有方法體。

3>抽象類和介面都不能例項化。

4>抽象類可以包含構造方法,介面中沒有構造方法。

功能:1>抽象類一般用來表示同類事物,介面可以表示不是同類事物。

2>抽象類可以實現**的重用,也可以約束子類的功能。介面就是約束實現類的功能,降低**之間的耦合性。

int i=10;

i=i++;

system.out.println(i);

//輸出i=10;

理解:i++看成是乙個整體。

等價於 int k=i++;

i=k;

int k=0;

int i=10;

while(k<100)

system.out.println(i);

//輸出i=10;

介面,抽象類

介面 用inte ce定義介面 由常量定義和方法定義兩部分組成 格式 修飾符 inte ce a extends b 在類中實現介面,方法名 返回值型別 引數的個數和型別必須與介面中完全一致 實現介面中所有方法 實現多個介面,中間用逗號分隔 抽象類包含抽象方法的乙個類 沒有足夠資訊描繪物件 用abs...

抽象類 介面

抽象類中的抽象方法禁止寫任何實現 1,a 抽象類不能被繼承 b 抽象方法不能有任何實現,一切實現都在子類中 c 抽象類中可以有非抽象方法,但是非抽象類絕對不能有抽象方法 class program public abstract class person public class chinese p...

抽象類 介面

1,包含乙個抽象方法的類必須是抽象類 2,抽象方法和抽象類都要使用abstract關鍵字宣告 3,抽象方法只需要宣告而不需要實現 4,抽象類必須被子類繼承,子類 如果不是抽象類 必須覆寫抽象類中的全部抽象方法 何來此問題呢?因為抽象類不能直接例項化,構造方法的作用就是例項化物件的時候,給物件初始化屬...