Java 与其他继承数据一起使用instanceof时的混淆

Java 与其他继承数据一起使用instanceof时的混淆,java,inheritance,subclass,superclass,instanceof,Java,Inheritance,Subclass,Superclass,Instanceof,我已经发布过一次关于这个项目的帖子,但我再一次被一个我正在学习的新概念所困扰(另请注意;我是一名CS学生,所以请不要简单地给我一个解决方案,因为我的大学有严格的代码复制规则,谢谢。)。我在这个概念上遇到了一些困难,主要是我很难实现我的目标,尽管教科书上的例子非常有意义。所以,请简单解释一下我在做什么: 我有一个实体类,它从驱动程序中获取扫描仪。然后,我的另一个类将扫描器交给一个超类及其两个子类,然后继承该扫描器。每个类都有从扫描仪读取的.txt文件中读取的不同数据。然后,这三个类将数据发送给实体

我已经发布过一次关于这个项目的帖子,但我再一次被一个我正在学习的新概念所困扰(另请注意;我是一名CS学生,所以请不要简单地给我一个解决方案,因为我的大学有严格的代码复制规则,谢谢。)。我在这个概念上遇到了一些困难,主要是我很难实现我的目标,尽管教科书上的例子非常有意义。所以,请简单解释一下我在做什么: 我有一个实体类,它从驱动程序中获取
扫描仪。然后,我的另一个类将扫描器交给一个
超类
及其两个子类
,然后继承该扫描器。每个类都有从
扫描仪读取的.txt文件中读取的不同数据。然后,这三个类将数据发送给实体进行最终计算。这就是我的问题所在,在所有数据被读取之后。我有一个方法可以显示一个新的输出,还有一些方法可以从
super
及其派生类中添加数据。EDIT:我根本不知道如何通过super调用子类的实例变量,以便添加和计算数据

以下是我的四节课的顺序;驱动程序、实体、超级、子系统:

    public static final String INPUT_FILE = "baseballTeam.txt";

    public static void main(String[] args) {
        BaseballTeam team = new BaseballTeam();
        Scanner inFile = null;
        try {
            inFile = new Scanner(new File(INPUT_FILE));
            team.loadTeam(inFile);
            team.outputTeam();
        } catch (FileNotFoundException e) {
            System.out.println("File " + INPUT_FILE + " Not Found.");
            System.exit(1);

        }
    }

}



public class BaseballTeam {

    private String name;
    private Player[] roster = new Player[25];

    Player pitcher = new Pitcher();
    Player batter = new Batter();

    BaseballTeam() {
        name = "";
    }

    public String getName() {
        return name;
    }

    public void setName(String aName) {
        name = aName;
    }

    public void loadTeam(Scanner input) {
        name = input.nextLine();
        for (int i = 0; i < roster.length; i++) {
            if (i <= 9) {
                roster[i] = new Pitcher();
            }
            else if ((i > 9) && (i <= 19)) {
                roster[i] = new Batter();
            }
            else if (i > 19) {
                roster[i] = new Player();
            }
            roster[i].loadData(input);
            roster[i].generateDisplayString();
            //System.out.println(roster[i].generateDisplayString());  //used sout to test for correct data
        } 

    }

    public void outputTeam() {
        if ((pitcher instanceof Player) && (batter instanceof Player)) {           
               for (int i = 0; i < roster.length; i++) {
            System.out.println(roster[i].generateDisplayString());
        } 
    }

//How do I go about doing calculates?
    public int calculateTeamWins() {        
             if ((pitcher instanceof ) && (batter instanceof Batter)) {

        }


        return 0;
    }

    public int calculateTeamSaves() {
        if ((pitcher instanceof Pitcher) && (batter instanceof Batter)) {

        }
        return 0;
    }

    public double calculateTeamERA() {
        if ((pitcher instanceof Pitcher) && (batter instanceof Batter)) {

        }
        return 0;
    }

    public double calculateTeamWHIP() {
        if ((pitcher instanceof Pitcher) && (batter instanceof Batter)) {

        }
        return 0;
    }

    public double calculateTeamBattingAverage() {
        if ((pitcher instanceof Pitcher) && (batter instanceof Batter)) {

        }
        return 0;
    }

    public int calculateTeamHomeRuns() {
        if ((pitcher instanceof Pitcher) && (batter instanceof Batter)) {

        }
        return 0;
    }

    public int calculateTeamRBI() {
        if ((pitcher instanceof Pitcher) && (batter instanceof Batter)) {

        }
        return 0;
    }

    public int calculateStolenBases() {
        if ((pitcher instanceof Pitcher) && (batter instanceof Batter)) {

        }
        return 0;
    }
}



public class Player {

    protected String name;
    protected String position;

     Player(){        

        name = "";
        position = "";        
    }
    public String getName() {
        return name;
    }

    public void setName(String aName) {
        name = aName;
    }

    public String getPosition() {
        return position;
    }

    public void setPosition(String aPosition) {
        position = aPosition;
    }  

    public void loadData(Scanner input){
        do {

            name = input.nextLine();
        } while (name.equals(""));
         position = input.next();
         //System.out.println(generateDisplayString());
    }

    public String generateDisplayString(){

        return "Name: " + name + ", Position:" + position; 
    }
}


public class Pitcher extends Player {

    private int wins;
    private int saves;
    private int inningsPitched;
    private int earnedRuns;
    private int hits;
    private int walks;
    private double ERA;
    private double WHIP;

    Pitcher() {
        super();
        wins = 0;
        saves = 0;
        inningsPitched = 0;
        earnedRuns = 0;
        hits = 0;
        walks = 0;
    }

    public int getWins() {
        return wins;
    }

    public void setWins(int aWins) {
        wins = aWins;
    }

    public int getSaves() {
        return saves;
    }

    public void setSaves(int aSaves) {
        saves = aSaves;
    }

    public int getInningsPitched() {
        return inningsPitched;
    }

    public void setInningsPitched(int aInningsPitched) {
        inningsPitched = aInningsPitched;
    }

    public int getEarnedRuns() {
        return earnedRuns;
    }

    public void setEarnedRuns(int aEarnedRuns) {
        earnedRuns = aEarnedRuns;
    }

    public int getHits() {
        return hits;
    }

    public void setHits(int aHits) {
        hits = aHits;
    }

    public int getWalks() {
        return walks;
    }

    public void setWalks(int aWalks) {
        walks = aWalks;
    }

    @Override
    public void loadData(Scanner input) {
        super.loadData(input);
        wins = input.nextInt();
        saves = input.nextInt();
        inningsPitched = input.nextInt();
        earnedRuns = input.nextInt();
        hits = input.nextInt();
        walks = input.nextInt();

    }

    @Override
    public String generateDisplayString() {
        calculateERA();
        calculateWHIP();
        return String.format(super.generateDisplayString() + ", Wins:%1d, Saves:%1d,"
                + " ERA:%1.2f, WHIP:%1.3f ", wins, saves, ERA, WHIP);
    }

    public double calculateERA() {
        try {
            ERA = ((double)(earnedRuns * 9) / inningsPitched);
        } catch (ArithmeticException e) {
            ERA = 0;
        }
        return ERA;
    }

    public double calculateWHIP() {
        try {
            WHIP = ((double)(walks + hits) / inningsPitched);
        } catch (ArithmeticException e) {
            WHIP = 0;
        }
        return WHIP;
    }
}


public class Batter extends Player {

    private int atBats;
    private int hits;
    private int homeRuns;
    private int rbi;
    private int stolenBases;
    private double batAvg;

    Batter() {
        super();
        atBats = 0;
        hits = 0;
        homeRuns = 0;
        rbi = 0;
        stolenBases = 0;
    }

    public int getAtBats() {
        return atBats;
    }

    public void setAtBats(int aAtBats) {
        atBats = aAtBats;
    }

    public int getHits() {
        return hits;
    }

    public void setHits(int aHits) {
        hits = aHits;
    }

    public int getHomeRuns() {
        return homeRuns;
    }

    public void setHomeRuns(int aHomeRuns) {
        homeRuns = aHomeRuns;
    }

    public int getRbi() {
        return rbi;
    }

    public void setRbi(int aRbi) {
        rbi = aRbi;
    }

    public int getStolenBases() {
        return stolenBases;
    }

    public void setStolenBases(int aStolenBases) {
        stolenBases = aStolenBases;
    }

    @Override
    public void loadData(Scanner input) {
        super.loadData(input);
        atBats = input.nextInt();
        hits = input.nextInt();
        homeRuns = input.nextInt();
        rbi = input.nextInt();
        stolenBases = input.nextInt();      
    }

    @Override
    public String generateDisplayString() {
        calculateBattingAverage();
        return String.format(super.generateDisplayString() +
                ", Batting Average:%1.3f, Home Runs:%1d, RBI:%1d, Stolen Bases:%1d"
                , batAvg, homeRuns, rbi, stolenBases);
    }

    public double calculateBattingAverage() {
        try{
        batAvg = ((double)hits/atBats);
        } catch (ArithmeticException e){
            batAvg = 0;
        }
        return batAvg;
    }
}
publicstaticfinalstringinput\u FILE=“baseballTeam.txt”;
公共静态void main(字符串[]args){
棒球队=新棒球队();
扫描仪填充=空;
试一试{
infle=新扫描仪(新文件(输入文件));
团队。加载团队(infle);
team.outputeam();
}catch(filenotfounde异常){
System.out.println(“文件”+输入文件+“未找到”);
系统出口(1);
}
}
}
公营棒球队{
私有字符串名称;
私人球员[]名册=新球员[25];
球员投手=新投手();
球员击球手=新击球手();
棒球队{
name=“”;
}
公共字符串getName(){
返回名称;
}
public void setName(字符串名称){
name=aName;
}
公共void加载团队(扫描仪输入){
name=input.nextLine();
对于(int i=0;iif (foo instanceof FooSubclass) {
  FooSubclass fooSub = (FooSubclass) foo;
  //foo and fooSub now are references to the same object, and you can use fooSub to call methods on the subclass
} else if (foo instanceof OtherSubclass) {
  OtherSubclass otherSub = (OtherSubclass) foo;
  //you can now use otherSub to call subclass-specific methods on foo
}