學習Java的Day04
阿新 • • 發佈:2020-06-29
知識點
介面:
1.介面是功能的集合,同樣可看做是一種資料型別,是比抽象類更為抽象的”類”。
2. 介面中只允許出現抽象方法,不能出現非抽象方法
3. 介面的原始檔也是java檔案,編譯後的檔案也是.class,所以可以把介面看作一個特殊的類
注意:
介面是供別的類去實現的,並且要實現他的抽象方法的,所以介面中方法的訪問修飾符必須定義成public
介面中不能定義普通的成員變數,只能定義成public static final 成員變數
一個類可以同時實現多個介面,但是需要將抽象方法進行實現,建立介面的時候修飾符可以省略, 系統會自動加上,實現的時候,就必須要新增public
介面的特點:
介面不能建立物件
介面的變數使用public static final修飾,如果不寫預設新增
介面的方法為public abstrict,如果不寫預設新增
子類必須重寫介面中所有的抽象方法後,才能建立物件,
如果子類不不能夠重寫所有的抽象方法,那麼子類必須定義成抽象類
介面的作用:
- 擴充套件原有類的功能
- 設定規則
- 降低耦合性
問題分析:
1.為什麼介面可以實現多繼承????
答:因為介面中的方法都是沒有實現的,所以就算有兩個父介面的方法名稱相同,子類實現介面的時候也不會有什麼影響,
只要重寫即可,所以介面與介面之間是存在多繼承的。
小小練習:
package com.day04; public interface HDMI { //獲取輸入訊號名稱void input(); //獲取裝置名稱
String getName();
} /////////////////////////////////////////////////////////// class computer implements HDMI{ @Override
public void input() {
System.out.println("電腦訊號輸入。。。。。。");
} @Override
public String getName() { return "電腦裝置";
}
} ///////////////////////////////////////////////////////////// class GameMachine implements HDMI{
@Overridepublic void input() {
System.out.println("遊戲機訊號輸入。。。。。。");
} @Override
public String getName() {
return "遊戲機裝置";
}
} ////////////////////////////////////////////////////////////////// class TV {
public void output(HDMI hdmi ) {
//裝置錄入
hdmi.input();
//獲取裝置名稱
System.out.println("裝置名稱為:" +hdmi.getName());
}
} class TestHDMI{ public static void main(String[] args) {
//呈現電腦畫面
computer com = new computer();
GameMachine game = new GameMachine();
//準備終端裝置
TV tv = new TV();
tv.output(game);
}
}
多型: 當一個類能表現出多種狀態的時候,我們稱這種現象為多型現象
多型的表現形式:讓父類的變數去指向子類物件的地址
條件:必須有繼承關係
多型的表達形式: 父介面/父類 變數 = new 子類/父介面的實現類的物件
注意:同一個父類的方法會被不同的子類重寫。在呼叫方法時,呼叫的為各個子類重寫後的方法。
多型的特點:
對於成員方法:編譯的時候看=左邊,執行的時候看=右邊
對於成員變數:編譯的時候看=左邊,執行的時候看=左邊
instanceof關鍵字
如果直接進行強制轉換的時候有可能會出現問題,所以可以使用instanceof進行判斷如 物件 instanceof 類名判斷左邊的物件與右邊的變數是否有所屬關係。
練習簡單的多型
package com.day04.work01; import java.util.Random; public class People {
/*
定義一個類是People,定義兩個類,一個是Man,一個是 Woman,Man中有個屬性是老婆,有一個方法 lol,
Woman中有個屬性是老公,有一個方法shopping,
還 有一個方法生孩子,先判斷是否有老公,如果有,就建立 一個物件50%概率是man,50%概率是woman,有一個 返回值,
最後如果是男的呼叫lol,如果是nv的呼叫 shopping
*/
} class Man extends People { Woman laopo; void lol() {
System.out.println("玩LOL。。。。。。");
} } class Woman extends People { Man laogong; void shopping() {
System.out.println("購物。。。。。。。");
} public People getBaby() { People peo = null;
if (laogong != null) {
Random ran = new Random();
int x = ran.nextInt(2);
if (x == 0) {
peo = new Man();
} else if (x == 1) {
peo = new Woman();
}
}
return peo;
}
} class TestPeople {
public static void main(String[] args) {
Man man = new Man();
Woman woman = new Woman();
woman.laogong = man; People peo = woman.getBaby();
if (peo == null) {
System.out.println("沒有老公,不能生孩子");
return;
}
if (peo instanceof Man) {
Man m = (Man) peo;
m.lol();
} else {
Woman wo = (Woman) peo;
wo.shopping();
} }
}
構造方法特點:
構造方法名稱必須和型別保持一致。
構造方法沒有具體的返回值。