今天小編就為大家帶來一篇有關Java多態實例的文章。小編覺得挺實用的,為此分享給大家做個參考。一起跟隨小編過來看看吧。
當父類型引用指向子類型對象會導致程序存在編譯階段綁定和運行階段綁定兩個不同的狀態,這種機制可以成為多態機制.
向上轉型:子類型-->父類型,又稱為自動類型轉換.
向下轉型:父類型-->子類型,又稱為強制類型轉換.
//Animal.java
package qw;
public class Animal {
public void move()
{
System.out.println("動物在移動");
}
public void eat() {
System.out.println("動物在吃");
}
}
//Bird.java
package qw;
public class Bird extends Animal{
public void fly()
{
System.out.println("小鳥在飛");
}
public void eat() {
System.out.println("小鳥在吃東西");
}
}
//Cat.java
package qw;
public class Cat extends Animal{
public void move()
{
System.out.println("貓在移動");
}
public void catchMouse()
{
System.out.println("貓在捉老鼠");
}
}
//Test.java
package qw;
public class Test {
public static void main(String[] args) {
Animal a1 = new Animal();
a1.move();
//向上轉型(子對象向父對象轉型),a2使用的是繼承的方法,可使用方法覆蓋父類繼承下來的方法.
//1,編譯階段編譯器檢查a2這個引用的數據類型為Animal,由于Animal.class字節碼當中有move()方法
//所以編譯通過了,這個階段成為靜態綁定
//2,在程序運行階段,由于JVM堆內存真實存在的對象是Cat對象,所以一定調用的是Cat對象的move()方法,這個過程
//稱為動態綁定
//3.無論Cat類有沒有重寫方法,運行階段調用的一定是Cat類的move()方法,因為JVM堆內存中真實存在的對象是Cat對象.
Animal a2 = new Cat();
a2.move();
a2.eat();
//如果想訪問子對象特有的方法,需強制換成子對象,即向下轉型(父對象向子對象轉型)
if(a2 instanceof Cat) {
Cat a3 = (Cat)a2;
a3.catchMouse();
}
else {
Bird a3 = (Bird) a2;
a3.fly();
}
}
}
運行結果:
以上就是實現Java多態的例子,代碼詳細清楚,如果在日常工作遇到這個問題,希望你能通過這篇文章解決問題。如果想了解更多相關內容,歡迎關注億速云行業資訊頻道!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。