第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

具有不確定方法簽名的抽象方法

具有不確定方法簽名的抽象方法

紅顏莎娜 2023-06-08 20:47:37
我有一個設計問題。我試著寫一個角色扮演游戲,讓巫師互相戰(zhàn)斗。他們通過施法互相對抗。我決定為所有法術創(chuàng)建一個抽象超類?;旧?,一個咒語是一個有名字的對象(例如火球),知道它的巫師(通過巫師值確定咒語的強度)并且必須施放咒語,所以它應該有一個抽象方法“cast ”。public abstract class Spell {    private String name;    private Sorcerer sorcerer;    public abstract void cast();}但是現(xiàn)在我有一個問題:我無法規(guī)范這個方法的方法簽名,因為不同的咒語需要不同的參數(shù)并且可能有不同的返回值。治療施法可以治療巫師并且可能不需要參數(shù)。但是例如火球法術需要一個敵人作為參數(shù)。我將不得不為法術定義不同的基類。這可能會導致爆炸式的類層次結構。有沒有辦法定義某種“海綿方法”來重載?或者有更好的方法來解決這個問題嗎?
查看完整描述

2 回答

?
波斯汪

TA貢獻1811條經(jīng)驗 獲得超4個贊

一種方法是使用可變參數(shù)。假設一個法術只能由一個巫師施展,它看起來像這樣:


public abstract class Spell {

? ? private String name;

? ? public abstract void cast(Sorcerer sorcerer, Target... targets);

}

cast 方法接受 1 個巫師和 0 個或更多目標


更好的方法

通過查看示例,似乎總是有一個巫師與一個法術相關聯(lián),該法術被保存到類變量 sorcerer(施放法術的角色)中。通過為那個 sorcerer 創(chuàng)建一個 getter,可以cast進一步簡化方法簽名:


public abstract class Spell {

? ? private String name;

? ? private Sorcerer sorcerer;

? ? public Sorcerer getSorcerer() {

? ? ? ? return sorcerer;

? ? }

? ? public abstract void cast(Target... targets);

}

這樣仍然可以從子類訪問 sorcerer,但它不是方法cast簽名的一部分。


如果我理解正確的話,該方法還應該支持不同的返回類型。實現(xiàn)這一點的一種方法是創(chuàng)建一個類(例如 SpellConsequence),它可以包含不同的值和類型。這樣可以從 cast 方法返回 SpellConsequence 類。


查看完整回答
反對 回復 2023-06-08
?
哈士奇WWW

TA貢獻1799條經(jīng)驗 獲得超6個贊

怎么樣void cast(Sorcerer source, Targetable target)?你可以spell.cast(myself, myself)治愈或spell.cast(myself, enemyPositionOrWhatever)。



查看完整回答
反對 回復 2023-06-08
  • 2 回答
  • 0 關注
  • 161 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網(wǎng)微信公眾號