Java學習筆記4——多態

多態

1.引用多態:1)父類的引用可以指向本類的對象;2)父類的引用可以指向子類的對象

public static void main(String[] args) {
        Animal obj1 = new Animal(); //父類的對象指向本類
        Animal obj2 = new Dog(); //父類的引用可以指向子類的對象
        //Dog obj3 = new Animal(); 不可以使用子類的引用指向父類
 }

2.方法多態   1)創建本類對象時,調用的方法爲本類方法;2)創建子類對象時,調用的方法爲子類重寫的方法或者繼承的方法

public class Initial {
 public static void main(String[] args) {
  // TODO Auto-generated method stub
        Animal obj1 = new Animal(); //父類的對象指向本類
        Animal obj2 = new Dog(); //父類的引用可以指向子類的對象
        //Dog obj3 = new Animal(); 不可以使用子類的引用指向父類
        obj1.eat();
        obj2.eat();
 }
}

注意:如果是子類中獨有的方法,則不能通過“父類的引用指向子類的對象”

3.引用類型轉換

1)向上類型轉換(隱式/自動類型轉換)——小類型到大類型

2)向下類型轉換(強制類型轉換)——大到小

3)instanceof運算符,解決引用對象類型,避免類型轉換的安全問題——判斷某個類型是否是某個類型的子類型,返回一個bool值

Dog dog = new dog();
Animal animal = dog;  //自動類型提升  向上轉換
Dog dog2 = (Dog)animal; //向下類型轉換
Cat cat = (Cat)animal;//強制類型轉換Cat,編譯器不會報錯;但是animal對象在內存中是dog類型,強制轉換成cat類型會造成類型不匹配——cat已經不是animal的子類型了
//使用instanceof
Dog dog = new Dog();
  Animal animal = dog;
  if(animal instanceof Dog){
   Dog dog2 = (Dog)animal;
  }else{
   System.out.println("無法dog");
  }
 
  if(animal instanceof Cat){
   Cat cat = (Cat)animal;
  }else{
   System.out.println("無法進行類型轉換---");
  }

4.Java中的抽象

1)語法定義:使用abstract修飾

2)場景:a)父類只是知道子類包含的方法,無法確切子類的方法如何實現——子類必須有那些方法;b)從多個具有相同特徵類中抽象一個抽象類,以抽象類作爲子類模版

3)作用:限制規定子類必須實現的某些方法,但不關注實現細節

4)使用規則:a.abstractd 定義抽象方法,只有聲明,不需要實現;b.包含抽象方法的類是抽象類;c.抽象類中可以包含普通方法,也可以沒有抽象方法;d.抽象類不能直接創建,可以定義引用變量

抽象類:
package com.imooc;
public abstract class Telephone {
 public abstract void call();
 public abstract void message();
}
子類1:
package com.imooc;
public class SmartPhone extends Telephone {
 public void call() {
  // TODO Auto-generated method stub
        System.out.println("通過語音電話");
 }
 public void message() {
  // TODO Auto-generated method stub
  System.out.println("通過語音短信");
 }
}
子類2:
package com.imooc;
public class CellPhone extends Telephone {
 public void call() {
  // TODO Auto-generated method stub
  System.out.println("通過鍵盤電話");
 }
 public void message() {
  // TODO Auto-generated method stub
  System.out.println("通過鍵盤短信");
 }
}
接口函數:
package com.imooc;
public class Initial {
 public static void main(String[] args) {
  // TODO Auto-generated method stub
  Telephone tel = new CellPhone();
  tel.call();
  tel.message();
  Telephone tel2 = new SmartPhone();
  tel2.message();
  tel2.call();
 }
}

5.Java中的接口

1)接口:接口定義了某一些類所遵循的規範,接口不關心類的內部數據,不關心類的方法實現細節,只規定類裏必須提供的方法。

2)使用interface關鍵字,而類用class。接口中都是常量或抽象方法

3)接口用來被繼承和被實現的,使用public,不能使用private和protect,interface前面使用abstract,abstract、public static final可以省略 

public abstract interface IPlayGame {

 public static final int a = 8;

 public abstract void playGame(); // 不能  ...playGame(){};

}

注意:接口中方法不能有方法體  例如:錯-void gg(){}   對-void gg();

定義接口:
public abstract interface IPlayGame {
 public static final int a = 6;
 public abstract void playGame();
}
繼承接口:
public class psp implements IPlayGame {  
 public void playGame() {
  // TODO Auto-generated method stub
  System.out.println("具有玩遊戲的功能");
 }
}


  

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章