javaSE_day7_this關鍵字_____繼承____抽象方法____介面____多型
1.this關鍵字
解決成員變數和區域性變數同名問題
在成員變數前面加上this,來區分成員變數和區域性變數 //例:this.name
this可以在構造方法之間進行呼叫,語法this()
2.繼承:子類繼承父類,也就繼承父類的屬性和方法
子類 extends 父類
3.抽象方法
沒有方法體,必須用abstract修飾的方法
例: public abstract void work();
注意:抽象方法必須在抽象類中
抽象類不能例項化物件,也就是不能new
4.抽象類的使用
定義子類繼承抽象類,將抽象方法進行重寫,建立子類物件
5.抽象類的特點
抽象類和抽象方法都需要被abstract修飾,抽象方法一定放在抽象類中
抽象類不可以直接建立物件。原因是:呼叫抽象方法沒有意義(抽象方法沒有方法體)
只有覆蓋了抽象類中的所有的抽象方法後,其子類才可以建立物件,否則子類還是一個抽象類
abstract不可以和哪些關鍵字一起使用:private final static
6.介面
介面是功能的集合,是一種引用資料型別,比抽象類更為抽象的類(因為抽象類中可以有普通方法和抽象方法,而介面中只能有抽象方法,不能有帶方法體的普通方法)
介面只描述應該具備的方法,並沒有具體實現,具體的實現由介面的實現類來實現
介面的實現類必須實現介面的全部方法,否則必須定義為抽象類。
介面的定義:public interface 介面名{
抽象方法1; //固定格式:public abstract 返回值型別 方法名(引數列表);例:public abstract void work();
//public abstract可以不寫,但寫不寫都有,也可以選擇性書寫
抽象方法2;
抽象方法3;
}
介面中的成員變數的定義:要求成員變數必須是常量(也就是不可修改的)
介面中的成員變數的固定格式:public static final 資料型別 變數名=值; //前面的public static final可以省略不寫,但但寫不寫都有
類與介面的關係:類實現介面 使用關鍵字implements
class 類 implements 介面{
重寫介面中的抽象方法
}
類和類之間可以通過繼承(extends)產生關係(類和類之間只能單繼承),
類和介面之間可以通過實現(implements)產生關係(類和介面之間可以多實現),
介面和介面之間可以通過繼承(extends)產生關係(介面和介面之間可以多繼承,如果多繼承,類中就要重寫所有介面中的方法)
抽象類中的所有抽象方法和接口裡的所有方法必須被子類重寫嗎?
不一定,關鍵要看子類是否是抽象類。
如果子類是非抽象類,則必須實現介面中的所有方法;
如果子類是抽象類,則可以不實現介面中的所有方法,因為抽象類中允許有抽象方法的存在
介面的多實現:
interface A interfaceB
class C implements A,B;
作為實現類C,必須全部重寫兩個介面的所有抽象方法,才能建立C類的物件
介面和抽象類的相同點和區別:
相同點:都位於繼承的頂端,用於被其他類實現或繼承
都不能直接例項化物件
包含抽象方法,子類必須重寫這些抽象方法
區別:抽象類為部分方法提供實現,避免子類重複實現這些方法,提高程式碼重用性
介面只能包含抽象方法
一個類只能繼承一個父類(可能是抽象類),卻可以實現多個介面(介面彌補了java中的單繼承)
多型:
多型呼叫的3種形式:
普通類: 父類 變數名=new 子類();
抽象類:抽象類 變數名=new 抽象類子類();
介面:介面 變數名=new 介面實現類();
多型中成員變數和成員方法的的特點:
成員變數:編譯執行全看父類(父類要是沒有就報錯)
成員方法:如果是靜態方法:編譯看父類,執行父類中的靜態方法
如果是非靜態方法:編譯看父類,執行子類中的重寫方法
多型中關鍵字instanceof的使用:
Person p=new Student();
p instanceof Student 比較p是不是Student型別的物件,如果是,返回true