1、Java抽象類程序員
(一) 抽象類的相關概念編程
①若是一個類中沒有包含足夠的信息來描繪一個具體的對象,這樣的類就是抽象類;架構
②用abstract修飾的類就是抽象類。若是某個類中包含有抽象方法,那麼該類就必須定義成抽象類。可是抽象類中不必定有抽象方法;函數
(二)抽象類的定義優化
[訪問權限] abstract class 類名 {spa
成員列表}設計
public abstract class Shapes {對象
public void draw(){繼承
//具體代碼}}開發
(三)抽象類的相關概念
①用abstract修飾的類就是抽象類。若是某個類中包含有抽象方法,那麼該類就必須定義成抽象類
②抽象類能夠有成員屬性和非抽象的成員方法;
③抽象類不能被實例化,但能夠有構造函數;
④抽象類只能用做基類,表示的是一種繼承關係。繼承抽象類的非抽象類必須實現其中的全部抽象方法,而已實現方法的參數、返回值要和抽象類中的方法同樣。不然,該類也必須聲明爲抽象類;
(四)抽象類的注意事項
①抽象類能夠有構造方法,但不能直接實例化,只能用來繼承;
②抽象類的派生子類應該提供對其全部抽象方法的具體實現;若是抽象類的派生子類沒有實現其中的全部抽象方法,那麼該派生子類仍然是抽象類,只能用於繼承,而不能實例化;
③抽象類中也能夠包含有非抽象的方法,子類中重寫非抽象方法時返回值和參數必須與父類一致;
④構造方法和靜態方法不能夠修飾爲abstract;
2、Java抽象方法
(一)抽象方法的相關概念
①在某些狀況下,類沒法(或者沒有必要)提供方法的具體實現,能夠將此方法聲明成抽象方法;
②在類中沒有方法體的方法,就是抽象方法;
③含有抽象方法的類,必定是抽象類;
(二)抽象方法的語法
使用關鍵字abstract聲明抽象方法,通常語法。
public abstract void draw();
3、抽象的做用
①在面向對象領域,抽象類主要用來進行類型隱藏;也就是使用抽象的類型來編程,可是具體運行時就可使用具體類型;
②利用抽象的概念,可以在開發項目中建立擴展性很好的架構,優化程序;
③抽象類,抽象方法,在軟件開發過程當中都是設計層面的概念。也就是說,設計人員會設計出抽象類,抽象方法,程序員都是來繼承這些抽象類並覆蓋抽象方法,實現具體功能;
4、多態性
①多態性是面向對象的三大特徵之一;
②多態的含義是:對外一種表現形式,內在有多種具體實現;
③Java中多態的具體體現;
1.方法重載
2.方法覆蓋
3.多態參數(新內容,重點、難點)
5、運行期類型與編譯期類型
(一)第一種狀況
①第一種狀況:編譯期類型和運行期類型相同;
②聲明A的時候,使用到的類型A表示對象的類型,被稱爲編譯期類型,在編譯期,虛擬機認爲a的類型是A,對於a所使用的屬性和方法的有效性將到類A中去驗證;
③構造方法A()中的A是運行期類型,在運行期,將執行運行期類型中的方法;
(二)第二種狀況
①當有繼承關係時,可能發生編譯期類型和運行期類型不一樣的狀況,即編譯期類型是父類類型,運行期類型是子類類型;
②對象ab的編譯期類型爲父類A類,運行期類型爲子類B類;
③若是一個引用的編譯期類型和運行期類型不一樣,那麼必定是編譯期類型與運行期類型有父類子類關係;
④ab對象使用的方法,在編譯期到類A中去校驗,而運行則執行B類的方法;
⑤若是一個對象的編譯期類型是父類,運行期類型是子類,能夠對該對象進行強制類型轉換,將其編譯器類型轉換爲與運行期類型相同的類型,即:B b=(B)ab;
6、父類引用指向子類對象
①當編譯器類型是父類,運行期類型是子類時,被稱爲父類引用指向子類對象;
class Animal{
……
}
class Cat extends Animal{
……
}
class Dog extends Animal {
……
}
Cat m = new Cat()
Animal x = new Cat() //Animal 的引用指向Cat的對象;
(二)多態環境下對屬性和方法的調用
①多態環境下對成員方法的調用
Animal x = new Cat()
x.show() //調用的是子類中的方法;
編譯看左邊,運行看右邊。
②多態環境下對靜態成員方法的調用
Animal x = new Cat()
x.show() //調用的是動物類中的靜態成員方法;
編譯和運行都看左邊
(三)多態環境下對成員變量的調用
①Animal x = new Cat()
x.num; //調用的是動物類中的成員變量。
編譯和運行都看等號左邊。
注意:變量不存在被子類覆寫這一說法,只有方法存在覆寫。
7、多態參數
(一)方法參數具備多態性
class Animal{
void eat() {}}
class Cat extends Animal{
void eat() {}}
class Dog extends Animal{
void eat(){}}
//方法的形式參數類型是父類類型,而傳遞的實際參數能夠是任意子類的對象
method(Animal animal){
animal .eat(); }
方法參數多態性的好處:提升代碼的擴展性
8、多態環境下對象造型
(一)向上造型 –又稱自動類型提高
class Animal{
abstract void eat();}
class Cat extends Animal{
void look() {
System.out.println("看家"); } }
………
Animal x=new Cat() //向上造型,Cat對象提高到Animal對象
x.eat() //只能使用父類中的方法
x.look() //報錯!不能使用子類中的方法
向上造型的做用是:提升程序的擴展性
(二)向下造型 –又稱向下轉型
class Animal{
abstract void eat();
}
class Cat extendsAnimal{
void look() {
System.out.println("看家");
}
}
………
Animal x=new Cat()
Cat m=(Cat)x; //向下轉型
m.eat() ;
m.look();//子父類中的方法均可以使用
向下造型的做用是:爲了使用子類中的特有方法
9、instanceof 操做符
(一)instanceof 用法
①result = 對象名稱 instanceof 類型;
②參數:
result:布爾類型。
對象名稱:必選項,任意對象表達式。
類型:必選項,任意已定義的類,能夠是API中的類,能夠是自定義的類;
③說明:
若是對象是這個類型的一個實例,則 instanceof 運算符返回 true。若是對象不是指定類的一個實例,或者對象是 null,則返回 false;
instanceof 運算符是用來在運行時指出對象是不是特定類的一個實例