父類(lèi)中至少有一個(gè)抽象的方法
1抽象方法需要有abstract關(guān)鍵字修飾究孕,關(guān)鍵字可以在public關(guān)鍵字的后面奠旺,也可以在public的前面
2抽象類(lèi)也需要有abstract關(guān)鍵字修飾蜀肘,關(guān)鍵字可以在public關(guān)鍵字的后面,也可以在public的前面
3一個(gè)抽象類(lèi)中至少有一個(gè)抽象方法
4抽象方法 只需要聲明方法,不能有方法體
父類(lèi)抽象類(lèi):
public abstract class Door {
/public void open(){
System.out.println("門(mén)的作用之一是開(kāi)門(mén)");
}
public void close(){
System.out.println("門(mén)的作用之二是關(guān)門(mén)");
}/
public abstract void open();
public abstract void close();
}
子類(lèi)一 鍵盤(pán)鎖門(mén):
public class KeypadDoor extends Door{
public void open(){
System.out.println("按鍵盤(pán)輸入密碼開(kāi)門(mén)");
}
public void close(){
System.out.println("拉上即可自動(dòng)鎖門(mén)");
}
}
子類(lèi)二 電動(dòng)門(mén):
public class PowerDoor extends Door{
public void open(){
System.out.println("按遙控器開(kāi)門(mén)");
}
public void close(){
System.out.println("按遙控器關(guān)門(mén)");
}
}
測(cè)試并調(diào)用
public class Demo01 {
public static void main(String[] args) {
KeypadDoor keypadDoor=new KeypadDoor();
keypadDoor.open();
keypadDoor.close();
PowerDoor powerDoor=new PowerDoor();
powerDoor.open();
powerDoor.close();
}
}
匿名類(lèi):
Door door=new Door(){
@Override
public void open(){
System.out.println("臨時(shí)實(shí)現(xiàn)的開(kāi)門(mén)方法");
}
@Override
public void close(){
System.out.println("臨時(shí)實(shí)現(xiàn)的關(guān)門(mén)方法");
}
};
door.open();
door.close();
接口
1關(guān)鍵字interface仔沿,實(shí)現(xiàn)類(lèi)的關(guān)鍵字 implements接口的名字
2接口中寫(xiě)方法的聲明扣蜻,沒(méi)有方法體
3接口方法默認(rèn)權(quán)限全部是public逆巍,因此,public可省略
4實(shí)現(xiàn)類(lèi)中需要全部實(shí)現(xiàn)接口中出現(xiàn)的未實(shí)現(xiàn)的方法
案例:
public interface Door {
//方法的聲明(簽名)
public void open();
public void close();
}
實(shí)現(xiàn)類(lèi):
public class KeypadDoor implements Door{
@Override
public void open() {
System.out.println("鍵盤(pán)門(mén)打開(kāi)");
}
@Override
public void close() {
System.out.println("鍵盤(pán)門(mén)關(guān)閉");
}
}
實(shí)現(xiàn)類(lèi):
public class PowerDoor implements Door{
@Override
public void open() {
System.out.println("電動(dòng)門(mén)打開(kāi)");
}
@Override
public void close() {
System.out.println("電動(dòng)門(mén)關(guān)閉");
}
}
接口沒(méi)有辦法直接new莽使,創(chuàng)建對(duì)象锐极,但是可以臨時(shí)創(chuàng)建一個(gè)匿名的實(shí)現(xiàn)類(lèi)
Door door=new Door(){
@Override
public void open(){
System.out.println("臨時(shí)實(shí)現(xiàn)的開(kāi)門(mén)方法");
}
@Override
public void close(){
System.out.println("臨時(shí)實(shí)現(xiàn)的關(guān)門(mén)方法");
}
};
door.open();
door.close();
接口中的靜態(tài)常量
public interface Door {
//靜態(tài)常量
String des="是個(gè)門(mén),注意安全";
}
接口中的默認(rèn)方法和靜態(tài)方法
public interface Door {
//靜態(tài)常量
String des="是個(gè)門(mén)芳肌,注意安全";
//方法的聲明(簽名)
public void open();
public void close();
public default void test01(){
System.out.println("接口中的默認(rèn)的測(cè)試方法");
}
public static void test02(){
System.out.println("接口中的靜態(tài)方法");
}
}
public class Demo02 {
public static void main(String[] args) {
keypadDoor.test01();
//keypadDoor.test02();
//Door.test01();
Door.test02();
}
}
接口中默認(rèn)的方法只能通過(guò)實(shí)現(xiàn)類(lèi)的對(duì)象keypadDoor.test01();調(diào)用
接口中的靜態(tài)方法只能通過(guò)接口名.方法 Door.test();調(diào)用
接口可以多繼承
演示:
public interface GrandFather {
public void diaoyu();
}
public interface Son {
public void Player();
}
public interface Father {
public void chouyan();
}
多繼承:一個(gè)接口可以同時(shí)繼承多個(gè)接口
public interface Temp extends GrandFather,Father,Son{
}
子類(lèi)必須實(shí)現(xiàn)抽象的父類(lèi)中或抽象的祖先類(lèi)中累計(jì)的未實(shí)現(xiàn)的抽象方法
祖先類(lèi)中的抽象方法灵再,如果在抽象的父類(lèi)中實(shí)現(xiàn)過(guò)肋层,子類(lèi)可以選擇實(shí)現(xiàn),也可以選擇不實(shí)現(xiàn)