package com.pb.demo6;public abstract class Pet { PRivate String name; //寵物名字 private String sex; //寵物性別 private int health; //寵物的健康值 //寵物看病的方法 abstract void toHospital();public String getName() { return name;}public void setName(String name) { this.name = name;}public String getSex() { return sex;}public void setSex(String sex) { this.sex = sex;}public int getHealth() { return health;}public void setHealth(int health) { this.health = health;} }package com.pb.demo6;/* * 小狗類 */public class Dog extends Pet { @Override void toHospital() { //小狗看病的方法 System.out.println("小狗看病:打針、吃藥!"); }}package com.pb.demo6;/* * 小豬類 */public class Pig extends Pet { @Override void toHospital() { System.out.println("小豬看病:打針、睡覺!"); }}package com.pb.demo6;/* * 小鳥類 */public class Bird extends Pet { @Override void toHospital() { //小鳥看病的方法 System.out.println("小鳥看病:吃藥、休息!"); }}package com.pb.demo6;/* * 寵物醫生類 */public class Doctor { //醫生治療方法 public void cure(Pet pet){ //將寵物傳參 if(pet.getHealth()<50){ //判斷健康值小于50 //調用看病的方法 pet.toHospital(); //將健康值設置為60,健康 pet.setHealth(60); } }}測試類
package com.pb.demo6;/* * 測試類 */public class Test { public static void main(String[] args) { //聲明醫生對象 Doctor dc=new Doctor(); //聲明寵物對象為小鳥 Pet brid=new Bird(); //調用醫生的治療方法 dc.cure(brid); //聲明寵物對象為小狗 Pet dog=new Dog(); //調用醫生的治療方法 dc.cure(dog); //聲明寵物對象為小豬 Pet pig=new Pig(); //調用醫生的治療方法 dc.cure(pig); }}結果:
小鳥看病:吃藥、休息!小狗看病:打針、吃藥!小豬看病:打針、睡覺!三、對象的多態性對象的多態性主要分為以下兩種類型:向上轉型和向下轉型3.1對象向上轉型:父類 父類對象 = 子類實例 ;向上轉型:子類對象 ->父類對象對于向上轉型,程序會自動完成,格式:如上面的:
//聲明寵物對象為小鳥 Pet brid=new Bird();//聲明寵物對象為小狗 Pet dog=new Dog(); //聲明寵物對象為小豬 Pet pig=new Pig();
編譯時類型為:Pet,而運行時類型為具體的類型
也就是說編譯時類型由聲明該變量時使用類型決定,而運行時類型由實際賦給該變量的對象決定
3.2 對象向下轉型:向下轉型:父類對象 ->子類對象對于向下轉型時,必須明確的指明要轉型的子類類型,格式:子類 子類對象 = (子類)父類實例 ;強制類型轉換上面的例中,子類沒有自己的方法,如果子類有自己的方法,醫生類中還能調用嗎?顯然不能,因為是向上轉為父類后,只能調用父類的方法,如果要調用子類的方法就需要用到向下轉型要用到instannceof四、instanceof 關鍵字在java中可以使用instanceof關鍵字判斷一個對象到底是那個類的實例對象 instanceof 類 ->返回boolean類型package com.pb.demo6;public abstract class Pet { private String name; //寵物名字 private String sex; //寵物性別 private int health; //寵物的健康值 //寵物看病的方法 abstract void toHospital();public String getName() { return name;}public void setName(String name) { this.name = name;}public String getSex() { return sex;}public void setSex(String sex) { this.sex = sex;}public int getHealth() { return health;}public void setHealth(int health) { this.health = health;} }package com.pb.demo6;/* * 小鳥類 */public class Bird extends Pet { @Override void toHospital() { //小鳥看病的方法 System.out.println("小鳥看病:吃藥、休息!"); } public void fly(){ System.out.println("小鳥會飛!"); }}package com.pb.demo6;/* * 小狗類 */public class Dog extends Pet { @Override void toHospital() { //小狗看病的方法 System.out.println("小狗看病:打針、吃藥!"); } public void run(){ System.out.println("小狗在地上跑!"); } }package com.pb.demo6;/* * 小豬類 */public class Pig extends Pet { @Override void toHospital() { System.out.println("小豬看病:打針、睡覺!"); } public void sleep(){ System.out.println("小豬要睡覺!"); }}package com.pb.demo6;/* * 寵物醫生類 */public class Doctor { //醫生治療方法 public void cure(Pet pet){ //將寵物傳參 if(pet.getHealth()<50){ //判斷健康值小于50 //調用看病的方法 pet.toHospital(); //將健康值設置為60,健康 pet.setHealth(60); //判斷是寵物類型 if(pet instanceof Dog){ //向下轉型,強制類型轉制 Dog dog=(Dog)pet; //調用小狗自己的方法 dog.run(); }else if(pet instanceof Bird){ //向下轉型,強制類型轉制 Bird bird=(Bird)pet; //調用小鳥自己的方法 bird.fly(); }else if(pet instanceof Pig){ //向下轉型,強制類型轉制 Pig pig=(Pig)pet; //調用小豬自己的方法 pig.sleep(); } } }}package com.pb.demo6;/* * 測試類 */public class Test { public static void main(String[] args) { //聲明醫生對象 Doctor dc=new Doctor(); //聲明寵物對象為小鳥 Pet brid=new Bird(); //調用醫生的治療方法 dc.cure(brid); //聲明寵物對象為小狗 Pet dog=new Dog(); //調用醫生的治療方法 dc.cure(dog); //聲明寵物對象為小豬 Pet pig=new Pig(); //調用醫生的治療方法 dc.cure(pig); }}結果:
小鳥看病:吃藥、休息!小鳥會飛!小狗看病:打針、吃藥!小狗在地上跑!小豬看病:打針、睡覺!小豬要睡覺!五、父類做為形參
package com.pb.demo2;/* * 商品類 */public class Goods { //打印商品價格方法 public void printPrice(){ System.out.println("打印商品價格"); }}package com.pb.demo2;/* * 食品類 */public class Foods extends Goods { @Override public void printPrice() { System.out.println("打印食品類的商品價格!"); } }package com.pb.demo2;/* * 電視類 */public class TVs extends Goods { @Override public void printPrice() { System.out.println("打印電視類商品價格!"); } }測試類:
package com.pb.demo2;public class Test { public static void main(String[] args) { //聲明3 個商品價格 Goods good=new Goods(); Foods food=new Foods(); TVs tvs=new TVs(); //調用方法 showPrice(good); showPrice(food); showPrice(tvs); } //顯示商品價格方法 static void showPrice(Goods good){ good.printPrice(); }}結果:
打印商品價格打印食品類的商品價格!打印電視類商品價格!
新聞熱點
疑難解答