day12 物件導向(下)

2022-06-02 23:24:19 字數 4343 閱讀 8492

(1)概念

​ 單態:這個物件只有唯一的一種狀態

​ student s = new student();

​ 多型:這個物件存在多種狀態。 是指同一行為,具有多個不同表現形式。

(2)多型實現的前提

​ 1)要有繼承或者實現的關係

​ 2)方法的重寫(如果沒有方法重寫,格式不會報錯,這樣的多型是沒有任何意義)

​ 3)父類的引用指向子類物件(父new子)或者父介面的引用指向實現類物件(父介面new實現類)

(1)多型體現的格式

父類型別 變數名 = new 子類物件();

變數名.方法名();

eg:animal dog = new dog();

dog.eat();

(2)多型思想下成員的特點

1)例項變數

​ 物件被什麼資料型別所修飾,這個變數就會呼叫誰的例項變數

//父類:superclass

public class superclass

//子類:subclass

public class subclass extends superclass

//測試類:polydemo02

public class polydemo02

}

2)例項方法

​ 先看父類中是否有這個方法,如果有,執行子類重寫後的方法;如果沒有,編譯報錯

//父類:superclass

public class superclass

}

//子類:subclass

public class subclass extends superclass

}

//測試類:polydemo04

public class polydemo04

}

3)構造器

​ 和原來一樣

//父類:superclass

public class superclass

}

//子類:subclass

public class subclass extends superclass

}

//測試類polydemo03

public class polydemo03

}

(1)多型的好處
//student類

public class student

public void setname(string name)

public int getage()

public void setage(int age)

//設定滿參構造器

public student(string name, int age)

//重寫系統中自帶的tostring方法

@override

public string tostring()

}

//測試類:polydemo05

public class polydemo05 ;

printarr(arr);

} //object為頂級父類,將其放置形參

private static void printarr(object arr)

}}

//執行結果

student [name=張三, age=18]

student [name=李四, age=23]

student [name=錢五, age=43]

student [name=孫六, age=23]

(2)多型的弊端及解決辦法

1)多型的弊端

​ 在多型的情況下,物件無法呼叫自己的特有方法,只能呼叫子類改寫父類的方法。

2)多型的解決方法

​ 解決多型的弊端,引用資料型別的型別轉換

型別轉換名稱

型別轉換方向

向上轉型(預設轉換方式)

將子類的物件或者實現類的物件轉換為父類的型別或者父介面型別(多型)

向下轉型(強制型別轉換)

將父類型別或者父介面型別轉換為子類型別或者實現類型別

子類型別   物件名 = (子類型別)父類型別的物件;

eg:animal cat = new cat(); //多型

dog dog = (dog)cat; //強轉

3)instanceof關鍵字的引入

​ 強制轉換時易發生型別轉換異常,使用instanceof給引用變數做型別的校驗

變數名 instanceof 資料型別 

eg:c instanceof cat

1.定義動物類

屬性:年齡,顏色

行為:eat(string something)方法(無具體行為,不同動物吃的方式和東西不一樣,

something表示吃的東西)生成空參有參構造,set和get方法

2.定義狗類繼承動物類

行為:eat(string something)方法,看家lookhome方法(無引數)

3.定義貓類繼承動物類

行為:eat(string something)方法,逮老鼠catchmouse方法(無引數)

4.定義person類

屬性:姓名,年齡

行為:keeppet(dog dog,string something)方法

功能:餵養寵物狗,something表示餵養的東西

行為:keeppet(cat cat,string something)方法

功能:餵養寵物貓,something表示餵養的東西

實現以上兩種行為,思考如何只寫乙個方法?

生成空參有參構造,set和get方法

5.測試以上方法

使用多型、強轉、instanceof等

//animal類

public abstract class animal

public void setage(int age)

public string getcolor()

public void setcolor(string color)

//設定無參構造器和滿參構造器

public animal(int age, string color)

public animal()

//設定動物類的抽象方法

public abstract void eat(string something);

}

//cat類 繼承 animal類

public class cat extends animal

//逮老鼠方法

public void catchmouse ()

//設定構造器

public cat()

public cat(int age, string color)

}

//dog類 繼承 animal類

public class dog extends animal

public void lookhome()

//設定構造器

public dog()

public dog(int age, string color)

}

//person類

public class person

// 餵養貓的方法

public void keeppet(cat cat,string something) */

public void keeppet (animal a,string something)

}

//測試類:

public class polydemo06

//cat物件不屬於dog,判斷返回false

if (cat instanceof dog)

//cat c = (cat)dog;

system.out.println("***************===");

// 呼叫飼養員餵養狗的方法

p.keeppet(dog, "骨頭");

}}

day12 物件導向 介面

package com.oop.demo11 抽象思維 inte ce 定義的關鍵字,介面需要實現類 public inte ce userservice package com.oop.demo11 public inte ce timeservice package com.oop.demo11...

day12 物件導向 this super 繼承

this表示當前物件,主要存在於兩個位置 構造器中 就表示當前建立的物件.方法中 哪乙個物件呼叫this所在的方法,那麼此時this就表示哪乙個物件.當乙個物件建立之後,jvm會分配乙個引用自身的引用 this.使用this場景 解決成員變數和引數 區域性變數 之間的二義性,必須使用 一般set方法...

Day12 物件導向的三大特性之多型

當中體現多型性,其實就是一句話 父類引用指向子類物件。格式 父類名稱物件名 new子類名稱 或者 介面名稱物件名 new實現類名稱 多型注意事項 1.多型是方法的多型,屬性沒有多型 2.需要有繼承關係 如果轉換無關係型別,就會有型別轉換異常 classcastexception 3.存在條件 不能被...