1. 程式人生 > >Java面向物件----多型概念,物件上下轉型

Java面向物件----多型概念,物件上下轉型

概念:同一操作作用於某一類物件,可以有不同的解釋,產生不同的執行結果

多型存在的三個必要條件

  •   需要存在繼承和實現關係
  •   同樣的 方法呼叫而執行不同操作,執行不同的程式碼(重寫操作)
  •   在執行時父類或者介面的引用變數可以引用其子類的 物件
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();