物件的多型性是怎麼體現的,與過載有什麼不同

2021-09-25 01:22:25 字數 2172 閱讀 3453

物件的多型性是怎麼體現的,與過載有什麼不同

\quad

\quad

現在有這樣乙個需求:

\quad

\quad

要求結合物件的多型性,對乙個簡易的商場打折系統的**進行重構:

">public static int calculateprice(string discountstrategy, int price, user user)  else 

}default:

throw new illegalstateexception("should not be here!");

}}

\quad

\quad

其實題目想表達的意思說直白點就是:當我們將上面的**寫完後,我們會覺得該實現的需求都實現了,很好。但是,當我們需在裡面增加一種情況,比如5折時,我們就需要在case中新增乙個情況,如果有1000種情況,那麼就有1000個case,可讀性非常差。那麼根據題目的意思,我們需要做的就是把每一種情況,單獨放到乙個方法中,單獨實現。

\quad

\quad

實現思路:

\quad

\quad

1.定義父類方法,可以任意實現一種折扣方法。後面可以根據該父類方法,利用子類對父類方法的重寫,在子類中實現其他方法。

\quad

\quad

舉例說明:對於意外情況的實現

">public class discountstrategy 

}

\quad

\quad

2. 為每種情況建立乙個單獨的方法,分別返回該種折扣情況下的應付金額。

\quad

\quad

舉例說明:對於vip使用者實行95折的情況的實現

">public class onlyvipdiscountstrategy extends discountstrategy

return price;

}}

\quad

\quad

3.到這裡應該可以發現,在每一種方法中都有price、user這兩個引數,每次不同的就是呼叫的方法不同。那麼將方法中的公共部分提取出來,用以提供乙個統一的對外介面,讓該介面去根據傳入該方法的引數選擇不同的實現方式。

\quad

\quad

**如下:

">public class pricecalculator 

}

\quad

\quad

最後,生成一下test測試,檢查**的實際效果:

">package com.github.hcsp.polymorphism;

import org.junit.jupiter.api.assertions;

import org.junit.jupiter.api.test;

public class pricecalculatortest

}

\quad

\quad

總結:自己在剛開始接觸到物件三大特性之一,"多型"時,總是不明白過載與多型的關係,有些地方說過載是多型的體現。在我的理解中,多型就是同一方法對不同引數所執行的不同的操作。比如**中的方法:

public static int calculateprice(discountstrategy strategy, int price, user user)
當我們呼叫該方法時,傳入的引數為:

pricecalculator.calculateprice(new discount95strategy(), 100, user.dios("屌絲"))
則呼叫全場95折的方法。從這個方面講,多型可以說是同一行為具有多個不同表現形式的能力。這樣說可能與過載有些類似,那麼過載是如何表現的,舉個例子:

public class test 

public int caculate(int s1,int s2,int s3)

public static void main(string args)

}

\quad

\quad

多型的核心體現(方法的多型性,物件的多型性)

多型的概念 同乙個方法,在不同的情境下會有不同的表現 多型的核心體現主要有以下兩點 1 方法的過載 定義 同乙個方法名可以根據引數列表的不同呼叫不同的方法體 2 方法的覆寫 定義 同乙個父類的方法,可以根據例項化子類的不同也有不同的表現 前提 方法覆寫 1 物件的向上轉型 父類 父類物件 new 子...

類的多型性體現

引用多型 父類的引用可以指向本類的物件 父類的引用指向了自己的子類物件.方法多型 建立本類物件時,呼叫的方法為本類方法.建立子類物件時,呼叫的方法為子類重寫方法或繼承方法.注 不能訪問子類特有的方法 多型的前提 a.類與類之間必須有關係,要麼繼承,要麼實現 implement b.要有重寫 c.父類...

物件導向的多型 多型性

多型指的是一類事物有多種形態,比如水有多種形態 冰 水 水蒸氣,但都是h2o,下面定義乙個h2o的父類和三種形態的子類 class h2o def init self,name,temperature self.name name self.temperature temperature deftu...