Java面向物件----多型概念,物件上下轉型
阿新 • • 發佈:2018-11-12
概念:同一操作作用於某一類物件,可以有不同的解釋,產生不同的執行結果
多型存在的三個必要條件
- 需要存在繼承和實現關係
- 同樣的 方法呼叫而執行不同操作,執行不同的程式碼(重寫操作)
- 在執行時父類或者介面的引用變數可以引用其子類的 物件
package com.tanlei.newer; public class AnimalDemo { public static void main(String[] args) { Animal animal=new Dogg("哈哈"); Animal animal2=new Cat("花花"); animal.eat(); animal2.eat(); } } class Animal { private String name; public Animal(String name) { this.name = name; } // 這是一個通用方法 // 只是告訴其子類去實現它 public void eat() { } } class Dogg extends Animal { public Dogg(String name){ super(name); } public void eat() { System.out.println("狗啃骨頭"); } } class Cat extends Animal { public Cat(String name){ super(name); } public void eat() { System.out.println("貓吃魚"); } }
物件上下轉型
向上轉型 子類 --->父類
Animal animal=new Dogg("哈哈");//向上轉型 //向上轉型 安全 但可能會導致子類的方法丟失
//父類的引用變數只能呼叫父類中有的方法或者子類重寫的方法
向下轉型 父類--->子類
//向下轉型 不安全 if(animal2 instanceof Cat) { Cat cat=(Cat)animal2; cat.sleep(); }
instanceof
用法:
object instanceof class / /object是class或其子類的一個例項
動態繫結
編譯前繫結 (靜態繫結)
Person.sayHi();
執行時,根據變數實際引用的物件型別決定呼叫哪個方法(動態繫結)
Person p =new Teacher(); o.sayHi();