天天看點

Java系列(17)——多态

本系列部落格彙總在這裡:Java系列_彙總

目錄

  • ​​一、多态是什麼​​
  • ​​二、多态特點​​
  • ​​三、什麼是多态子類的執行個體可以賦給父類引用​​

一、多态是什麼

  1. 多态就是行為具有表現多種功能的能力。
  2. 比如父類裡的方法在子類中重寫時,他們的方法體不一樣就是多态(繼承多态)。

二、多态特點

  1. 必須要有繼承關系,在抽象類中可以定義多态的抽象方法,通過子類來繼承這個抽象類然後複寫抽象類中的方法已達到多态的效果。
  2. 多态子類的執行個體可以賦給父類引用。
  3. 示例代碼
  4. //父類
    class Person
    {      
      String name;            
      public void eating()
      {   
      }
    }      
    class Student1 extends Person
    {
      //實作了eating的第一種形态
      public void eating()
      {   
        System.out.println(name+"吃西瓜");
      }
    }      
    class Student2 extends Person
    {
      //實作了eating的第二種形态
      public void eating()
      { 
        System.out.println(name+"吃橘子");
      }
    }      
    class Welcome
    { 
      public static void main(String[] args)
      {   
        Student1 st0 = new Student1();
        st0.name = "張三";
        st0.eating();
        
        Student2 st1 = new Student2();
        st1.name = "李四";
        st1.eating();
      }
    }      
  5. Java系列(17)——多态
  6. 在父類裡的方法也可以是抽象的,注意關鍵字 abstract 的寫法和添加位置,如下,與上面略有所不同就是父類裡的方法是抽象的,實作原理都是多态。
    Java系列(17)——多态

三、什麼是多态子類的執行個體可以賦給父類引用

  1. 示例
  2. abstract class Person
    {
      String name;  
      int age;   
      
      /**
       *繼承多态的抽象方法
       */                                   
      public abstract void eating();
    }      
    class Student1 extends Person
    {
      //實作了eating的第一種形态
      public void eating()
      {   
        System.out.println("\t"+name+"吃西瓜");
      }
    }      
    class Student2 extends Person
    {
      //實作了eating的第二種形态
      public void eating()
      { 
        System.out.println("\t"+name+"吃橘子");
      }
    }      
    class Teacher
    { 
      /**
       *檢查Student
       */
       public void checkStudent(Person st)
       {     
         System.out.println("開始");
         st.eating();
         System.out.println("結束");
       }
    }      
    class Welcome
    { 
      public static void main(String[] args)
      { 
        //子類的執行個體用父類的類型來接收  
        Person st1 = new Student1();    
        st1.name = "張三";    
        
        //子類的執行個體用父類的類型來接收
        Person st2 = new Student2();
        st2.name = "李四";    
        
        //建立老師對象檢查學生
        Teacher teacher = new Teacher();
        System.out.println("-----------------------");
        teacher.checkStudent(st1);
        
        System.out.println("-----------------------");
        teacher.checkStudent(st2);  
      }
    }      
  3. Java系列(17)——多态
  4. 子類的執行個體賦給了父類做引用,實際調用還是調用子類的,内部機制是有辨別的,但是需要注意的是子類的執行個體賦給父類做引用,父類不能調用子類當中獨有的方法。