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

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

Java多態(tài)指針

Java多態(tài)指針

函數式編程 2021-10-27 16:40:17
我一直在研究 Java,但遇到了一個我無法解決的問題(我做了研究,但因為這是一個非常具體的問題,所以沒有找到答案):我正在嘗試以與接口相同的方式添加類繼承的變量和方法(有一個由已經有祖先的不同類繼承的類,即:Actor extends Character 和 Weapon extends Item,我需要兩者Actor 和 Weapon 具有 XY 坐標、寬度/高度和 move() 方法)起初我認為接口是解決方案,但由于它們是 100% 抽象的,我每次都需要重新定義方法,對我來說,在這種情況下,這超出了繼承的目的。我曾想過在祖先樹的根部創(chuàng)建一個上級父類(如 MovableObject),其中包括 Item 和 Actor 類,但由于它們在其他方面都如此不同,因此將它們置于同一祖先中感覺是違反邏輯的樹。編輯謝謝大家的回復,我說過我會在嘗試時更新,我做到了,但現在我意識到我的整個代碼需要大量重構,所以我無法立即告訴你它是否有效. 雖然它確實解決了我的問題,因為我至少有一些事情要做。
查看完整描述

2 回答

?
大話西游666

TA貢獻1817條經驗 獲得超14個贊

您可以使用的語言結構是接口抽象類。

  • 接口:定義不相關對象之間的通用行為(例如,可以序列化的對象、可以比較的對象等)。

  • 抽象類:定義跨對象層次結構的公共行為(例如,在 中定義方法并getPrice在 中Item繼承該方法是有意義的Weapon)。

在你的榜樣,等方法getWidth(),getHeight(),getX()getY()都不錯的候選人接口(因為它們共享不相關的對象之間有一些共同的特點)。


查看完整回答
反對 回復 2021-10-27
?
慕森卡

TA貢獻1806條經驗 獲得超8個贊

// Another way to share this state would be via a Point interface and 

// aggregating two point objects in your Item and Character classes

interface Coordinates {


    double getX1();


    double getY1();


    double getX2();


    double getY2();


}


interface Dimension {


    double getWidth();


    double getHeight();


}

我不知道你的整個背景,但你確定你需要坐標和尺寸(我認為你可以從 X 和 Y 確定寬度和高度)?


這些接口應該由您的兩個祖先類(Character和Item)實現并通過層次結構繼承。難道不是之間添加一個共同的祖先Character和Item只是讓你能避免實施getX和getY的兩倍。


關于move方法,我認為這是另一個責任,您應該在其他地方定義它。


// Not necessarily the right name

class MoveHelper {


    // You can pass either a Character or an Item here

    // since both implement Coordinates

    // Not necessarily the right signature

    void move (Coordinates object)


}

根據您選擇如何設計解決方案,該move方法可以成為一個static地方或一個對象,你會聚集在這兩個Character和Item并委托給它的move實施。


最后一點,請考慮您可以通過繼承(接口和抽象類)或組合(如果您將MoveHelper和 委托給它以move實現Character和 中的實現,您會怎么做)實現重用Item。


希望這可以幫助!


查看完整回答
反對 回復 2021-10-27
  • 2 回答
  • 0 關注
  • 132 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號