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多型
- C++的動態繫結和靜態繫結C++
- vue基礎-動態樣式&表單繫結&vue響應式原理Vue
- [pwn基礎]動態連結原理
- Java基礎之淺談繼承、多型Java繼承多型
- 三、動態繫結屬性
- Java基礎系列-靜態代理和動態代理Java
- WPF 基礎MvvM繫結的使用MVVM
- Vue.js基礎學習(三) -------------動態繫結v-bind的介紹和使用Vue.js
- vue 動態繫結 v-modelVue
- 動態繫結 input v-model
- 關於動態字串的繫結字串
- Vue select 繫結動態變數Vue變數
- Vue 動態繫結CSS樣式VueCSS
- java 基礎 泛型Java泛型
- Java基礎-泛型Java泛型
- Java基礎 —— 泛型Java泛型
- java基礎:深入理解JDK動態代理JavaJDK
- JAVA物件導向基礎--封裝 繼承 多型Java物件封裝繼承多型
- 【Java反射】Java 泛型基礎Java反射泛型
- 介面的繫結方案和動態SQLSQL
- class 和 style 資料動態繫結
- 域名繫結動態IP實戰案例
- java基礎篇之多型Java多型
- 前端基礎之原生js事件繫結案例前端JS事件
- C#-WPF資料繫結基礎(一)C#
- VUE動態(自動)Loading【繫結到URL】,同頁面多個Loading互不衝突Vue
- 動態生成的html元素繫結click事件HTML事件
- jQuery實現DOM元素事件動態繫結jQuery事件
- Java基礎-泛型詳解Java泛型
- Java基礎之泛型方法Java泛型
- java資料型別基礎Java資料型別
- java基礎複習-----泛型Java泛型
- java - 多執行緒基礎Java執行緒
- C++整理17_執行時多型(晚繫結)C++多型
- Vue 框架-05-動態繫結 css 樣式Vue框架CSS