java基礎:多型(動態繫結)
一、例子
public class Animal {
private String name;
public void enjoy(){
System.out.println("---叫聲---");
}
public Animal(String name) {
this.name = name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
public class Dog extends Animal{
private String furColor;
public Dog(String name,String furColor) {
super(name);
this.furColor = furColor;
}
public void enjoy(){
System.out.println("---狗叫聲---");
}
public String getFurColor() {
return furColor;
}
public void setFurColor(String furColor) {
this.furColor = furColor;
}
}
public class Lady {
private String name;
private Animal pet;
Lady(String name,Animal pet){
this.name = name;
this.pet = pet;
}
public void myPetEnjoy(){
pet.enjoy();
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Animal getPet() {
return pet;
}
public void setPet(Animal pet) {
this.pet = pet;
}
}
public class Test {
public static void main(String[] args) {
Dog d = new Dog("Hachi","yellow");
Lady l1 = new Lady("lili",d);
l1.myPetEnjoy();
}
}
執行結果:
---狗叫聲---
二:分析
Dog d = new Dog("Hachi","yellow");
Lady l1 = new Lady("lili",d);
l1.myPetEnjoy();
呼叫Lady的myPetEnjoy()方法。這裡有兩個enjoy()方法,一個是父類Animal的,一個是Dog的。
那麼真正呼叫誰的呢?這裡有一個規則,new Lady("lili",d);堆記憶體中,真正的是誰,就呼叫誰的方法,而不是由引用Animal pet 決定的。這就是動態繫結(在java執行期,動的時候,才會去繫結。)
動態繫結的優點,可以隨時擴充套件功能,比如Lady想養一隻貓,只需要按照Dog的形式,建立一隻貓。
Cat c = newCat ("mimi","yellow");
Lady l1 = new Lady("lili",c);
l1.myPetEnjoy();
Lady內部的程式碼,完全不用動就可以了,這是物件導向一個很重要的特性。
三:總結
多型實現的條件
(1)要有繼承
(2)要有重寫
(3)父類引用指向子類物件
相關文章
- java繼承-靜態繫結和動態繫結Java繼承
- java中的靜態繫結與動態繫結Java
- JAVA動態繫結淺析Java
- java之多型(Polymorphic)、動態繫結(Dynamic Binding)、遲繫結(Late Binding)Java多型
- 理解靜態繫結與動態繫結
- C++ — 靜態繫結與動態繫結C++
- 超詳細Java基礎-多型Java多型
- WPF 繫結基礎
- C++的動態繫結和靜態繫結C++
- 動態繫結一
- Java 動態繫結機制的內幕Java
- vue基礎-動態樣式&表單繫結&vue響應式原理Vue
- 動態繫結和靜態繫結的簡單理解
- [pwn基礎]動態連結原理
- Java基礎之淺談繼承、多型Java繼承多型
- 深入理解 C++ 的動態繫結和靜態繫結C++
- Java基礎系列-靜態代理和動態代理Java
- 三、動態繫結屬性
- 動態繫結的心得 (轉)
- .NET基礎之資料繫結
- WPF 基礎MvvM繫結的使用MVVM
- java 基礎 泛型Java泛型
- Java基礎-泛型Java泛型
- 【Java基礎】泛型Java泛型
- [java]基礎型別Java型別
- 動態代理、多型原理多型
- Vue.js基礎學習(三) -------------動態繫結v-bind的介紹和使用Vue.js
- java基礎:深入理解JDK動態代理JavaJDK
- JAVA物件導向基礎--封裝 繼承 多型Java物件封裝繼承多型
- vue 動態繫結 v-modelVue
- 動態繫結 input v-model
- Vue 動態繫結CSS樣式VueCSS
- 關於動態字串的繫結字串
- 【Java反射】Java 泛型基礎Java反射泛型
- javascript基礎(事件的繫結)(三十四)JavaScript事件
- java基礎篇之多型Java多型
- java-基礎-泛型Java泛型
- class 和 style 資料動態繫結