1. 程式人生 > 其它 >Java第十三課---面向物件(多型)

Java第十三課---面向物件(多型)

多型

  • 動態編譯:型別:可擴充套件性

  • 即同一方法可以根據傳送物件的不同而採用多種不同的行為方式

  • 一個物件的實際型別是確定的,但可以指向物件的引用型別有很多(父類,有關係的類)

  • 多型存在的條件

    • 有繼承關係

    • 子類重寫父類方法

    • 父類引用指向子類物件

  • 注意:多型是方法的多型,屬性沒有多型性

  • instance of (型別轉換)引用型別

 

多型注意事項:
  1. 多型是方法的多型,屬性沒有多型

  2. 父類和子類,有聯絡 型別轉換異常!Class Cast Exception!

  3. 存在條件:繼承關係,方法需要重寫,父類引用指向子類物件! Father f 1=new Son();

    不能重寫的方法

    1. static 方法,屬於類,它不屬於例項

    2. final 常量:

    3. private 方法:

    package com.oop.demo06;

    public class Person {
       public void run(){
           System.out.println("run");
      }
    }
    =====================================
    package com.oop.demo06;

    public class Student extends Person{
       @Override
       public void run() {
           System.out.println("son");
      }
       public void eat(){
           System.out.println("eat");
      }
    }
    =====================================
    package com.oop;

    import com.oop.demo06.Person;
    import com.oop.demo06.Student;

    public class Application {
       public static void main(String[] args) {
           //一個物件的實際型別是確定的
           //new Student
           //new Person

           //可以指向的引用型別就不確定了:父類的引用指向子類

           //Student 能呼叫的方法都是自己的或者繼承父類的
           Student s1 = new Student();
           //Person 父型別,可以指向子類,但是不能呼叫子類獨有的方法
           Person s2 = new Student();
           Object s3 = new Student();

           //物件能執行那些方法,主要看物件左邊的型別,和右邊關係不大!
           //s2.eat();父類沒有eat方法,無法直接呼叫子類的

           s2.run();//子類重寫了父類的方法,執行子類的方法
           s1.eat();

      }

    }
       

     

     

     

  4.