1. 程式人生 > >javaSE_day7_this關鍵字_____繼承____抽象方法____介面____多型

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