介面面試題
-有些類建立物件沒有意義。需要把這個定義為抽象類
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
}
1)jdk1.8之後介面中使用static關鍵字修飾的方法有方法體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
}
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,抽象類必須被子類繼承,子類 如果不是抽象類 必須覆寫抽象類中的全部抽象方法 何來此問題呢?因為抽象類不能直接例項化,構造方法的作用就是例項化物件的時候,給物件初始化屬...