亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

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

如何從 Java 中的超類訪問子類?

如何從 Java 中的超類訪問子類?

RISEBY 2022-10-07 19:30:01
我有一個關于子類和超類的問題。在我正在處理的一個項目中,我有一個名為“Team”的超類和一些名為“TeamBlue”、“TeamRed”的子類……而且,所有這些子類中都有靜態字段和方法。我的問題是:如何將任何子類對象(TeamBlue 或 TeamRed)存儲到“團隊”對象中?如果這是有道理的。這是我想要實現的一個例子:Team team = new BlueTeam(); <-- 將任何顏色團隊存儲到“團隊”對象中這是我擁有的代碼的簡短版本:class Team {    //empty class used for binding all the team classes}class BlueTeam extends Team {    public static List<String> players = new ArrayList<String>();}class PlayerData {    Team playerTeam;    public PlayerData(Team tm){        playerTeam = tm;    }    playerTeam.players // I want to access any subclass that is stored into this "myTeam" object and access its players list}class createData {    List<PlayerData> data = new ArrayList<PlayerData>();    // this is what I've tried but I get a null exception    Team team = new BlueTeam();    data.add(new PlayerData(team));}
查看完整描述

2 回答

?
小怪獸愛吃肉

TA貢獻1852條經驗 獲得超1個贊

這不是面向對象的!為什么藍隊有一個靜態的球員名單?為什么是公開的?您應該使用 getter 并覆蓋該方法。


abstract class Team {

    // if there is a sensible default return then use it and the class needn't be abstract

    abstract List<String> getPlayers(); 

}


class BlueTeam extends Team {

    private final List<String> players = new ArrayList<>();


    @Override

    List<String> getPlayers() {

        return players;

    }

}

用法:


Team team = new BlueTeam();

List<String> bluePlayers = team.getPlayers();


查看完整回答
反對 回復 2022-10-07
?
慕容森

TA貢獻1853條經驗 獲得超18個贊

你很可能做錯了類層次結構。藍色不是團隊的屬性,顏色才是。這意味著Team您應該在 Team 中擁有一個名為colourorname的屬性,并在代表藍色或紅色團隊的 Team 實例中為該屬性分配“藍色”或“紅色”,而不是為每種可能的顏色進行子類化。



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

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

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

公眾號

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