了解Java继承,不确定如何正确使用super.toString()吗?

问题描述 投票:0回答:1

我是Java的新手,他正在实验室中练习简单的类层次结构以及实现和继承的使用。我将Main.Java作为驱动程序,将Taxpayer.Java作为超类,并且我正在将WeeklyTaxPayer.java作为三个子类的第一个。 WeeklyTaxPayer子类具有公共的computeStateTax方法,该方法当然会根据用户输入的内容来计算税额。]

我一直坚持要获取子类中的内容以进行打印。指示说明如下:

“ WeeklyTaxpayer类必须具有连接在一起的公共toString方法,并返回以下内容:通过调用父类toString方法以获取包含WeeklyTaxpayer实例的所有成员变量的值而返回的字符串。”] >

[TaxPayer超类中有一个公共的String toString()方法,该方法可打印出其余的用户信息(名称,ssn,总薪水,但我无法得到它来打印子类应计算的税额。] >

在WeeklyTaxPayer子类中,我具有:

 @Override
 public String toString(){
 return super.toString() + df.format(computeWeeklyTax(grossPay, taxPayerType));

但是税收的收益始终为零。让我知道是否应该添加我的代码,我是该网站的新手,也不希望它太长。谢谢您的帮助。

Updated

注意:我意识到,在TaxPayer和Main中找到的ComputeTax()方法将得出零,但是实验室在创建WeeklyTax子类之前要求它为零。除了返回0.0之外什么都不做。”我以为是这样做的,因为我的computeWeeklyTax方法会以某种方式覆盖它)

TaxPayer.Java

    import java.text.DecimalFormat;

public class Taxpayer {

// Instance variables
protected String name;
protected int ssNumber;

protected double grossPay;
protected static DecimalFormat df = new DecimalFormat("$#,###.00");

/**
   * Constructor
   *
   * @param name - name of the tax payer
   * 
   * @param ssN - ssN of the tax payer
   * @param gp - gross pay
    */
public Taxpayer(String name, int ssN, double gp) {
this.name = name;
this.ssNumber = ssN;

this.grossPay = gp;
}


/**
   * Returns the name
   */
public String getName() {
return name;
}
/**
   * Returns the ssNumber
*/
public String getSSNumber() {
String ssnStr = ssNumber + "";
ssnStr = ssnStr.substring(0, 3) + "-" + ssnStr.substring(3, 6) + "-" + ssnStr.substring(6);
return ssnStr;
}
/**
   * Returns the taxRate
*/

/**
   * Returns the grossPay
   */
public double getGrossPay() {
return grossPay;
}

/**
   * Computes the tax and returns it
   * @return
   */
public double computeTax() {
return (getGrossPay() - getGrossPay());
}



public String toString() {
return "Taxpayer Name: " + name + ", SSN: " + getSSNumber() + "Taxpayer Type: " + this.getClass().getName() + ", Gross Pay: " + df.format(grossPay)
+ ", Tax payable: " + df.format(computeTax());
}
}

WeeklyTaxPayer.Java:

public class WeeklyTaxpayer extends Taxpayer{


    public WeeklyTaxpayer(String name, int ssN, double gp) {
        super(name, ssN, gp);
    }

    public double computeWeeklyTax(double gp, char taxPayerType){

                     double stateTax = 0;

         while (taxPayerType == 'W')  

         {
          if ((grossPay >= 0) || (grossPay < 154))
          {
          stateTax = grossPay - 0;
          stateTax = grossPay * .0400;
          stateTax = grossPay + 0;


          }
          else if ((grossPay >= 154) || (grossPay < 212))
          {
              stateTax = grossPay - 154;
              stateTax = grossPay * .0450;
              stateTax = grossPay + 6.15;

          }
          else if ((grossPay >= 212)||(grossPay < 250))
          {
              stateTax = grossPay - 212;
          stateTax = grossPay * .0525;
          stateTax = grossPay + 8.75;

          }
          else if ((grossPay >= 250)||(grossPay < 385))
          {
              stateTax = grossPay - 250;
          stateTax = grossPay * .0590;
          stateTax = grossPay + 10.77;

          }

          else if ((grossPay >= 385)||(grossPay < 1731))
          {
          stateTax = grossPay - 385;
          stateTax = grossPay * .0685;
          stateTax = grossPay + 18.71;

          }
          else if ((grossPay >= 1731)||(grossPay < 1923))
          {
              stateTax = grossPay - 1731;
          stateTax = grossPay * .0764;
          stateTax = grossPay + 110.92;

          }
          else if ((grossPay >= 1923)||(grossPay < 2885))
          {
              stateTax = grossPay - 1923;
          stateTax = grossPay * .0814;
          stateTax = grossPay + 125.62;

          }
          else if ((grossPay >= 2885))
          {
              stateTax = grossPay - 2885;
          stateTax = grossPay * .0935;
          stateTax = grossPay + 203.92;

          }
         }

        return stateTax;

      }

        public char taxPayerType;
@Override
   public String toString()    {
        return super.toString() + df.format(computeWeeklyTax(grossPay, taxPayerType)); 
        }
}

Main.Java:

import javax.swing.*;
import java.text.*;

public class Main {


public static String getTaxpayerTypeName(char taxPayerType) {

            // based on the value of taxPayerType, returning full type name

            if (taxPayerType == 'W') {

                  return "Weekly";

            } else if (taxPayerType == 'B') {

                  return "Biweekly";

            } else if (taxPayerType == 'M') {

                  return "Monthly";

            } else {

                  return "Try Again!";  
            }
}

    /** Creates a new instance of Main */
    public Main() {
    }

    /**
     * @param args the command line arguments
     */
    public static void main( String[] args ) {
        String Type = "";
          String taxType = "";

        final int MAX_NUMBER = 5;
        Taxpayer t1 = null;   // Variable to hold an instance of the Taxpayer class
        Taxpayer t2 = null;   // Same as above
        Taxpayer t3 = null;   // Same
        Taxpayer t4 = null;   // Same
        Taxpayer t5 = null;   // Same


        Taxpayer t = null;
        DecimalFormat prec2 = new DecimalFormat("$#.00");
        DecimalFormat prec1 = new DecimalFormat("#.0%");
        String nameStr = "";   // Holds taxpayer name entered by user
        String ssnNumStr = ""; // Holds taxpayer's SSNnumber as string, entered by user
        int ssnNum = 0;         // Taxpayer's ssnumber as int
        String tRateStr = ""; // Taxpayer's tax rate as string, entered by user
        double trate = 0.0;    // Taxpayer's tax rate as double
        String grossStr = ""; // Taxpayer's gross pay as string, entered by user
        double grossPay = 0.0; // Taxpayer's gross pay as double

        int count = 0;         // The number of taxpayers created
        String outputStr = ""; // String for output display to user
        String outputStr2 = "";// String for output display to user
        String msgStr = "";    // Holds message for display to user
        int resp = 0;          // User's response from showConfirmDialog method




        while (true) {   



// Loop to input data on each taxpayer
            count++;



            // Read in name from user as a string
            nameStr = JOptionPane.showInputDialog("Enter taxpayer name");

             Type = JOptionPane
              .showInputDialog("Enter CAPITALIZED LETTER for your type: W for Weekly, B for BiWeekly, M for Monthly: ");

      char taxPayerType = Type.charAt(0);

                  taxType = getTaxpayerTypeName(taxPayerType);

            // Read in ID number from user as a string
            ssnNumStr = JOptionPane.showInputDialog("Enter SSN number");
            // Convert from type String to type int
            ssnNum = Integer.parseInt(ssnNumStr.trim());



            // Read in gross pay from user as a string
            grossStr = JOptionPane.showInputDialog("Enter gross pay");
            // Convert from type String to type double
            grossPay = Double.parseDouble(grossStr.trim());


                     switch (taxPayerType) {
                case 'W': t = new WeeklyTaxpayer(nameStr, ssnNum, grossPay);
               // case 'B': t = new BiWeeklyTaxpayer(nameStr, ssnNum, grossPay);;
               // case 'M': t = new MonthlyTaxpayer(nameStr, ssnNum, grossPay);;


            }

            // Assign new Taxpayer object to next available Taxpayer variable

            switch (count) {
                case 1: t1 = t; break;
                case 2: t2 = t; break;
                case 3: t3 = t; break;
                case 4: t4 = t; break;
                case 5: t5 = t; break;

            }
            outputStr += count + ". " + t.toString() + "\n";

            if (count < MAX_NUMBER) {
                msgStr = "\nMax number of allowed taxpayers is: " + MAX_NUMBER + "\nContinue?";

                resp = JOptionPane.showConfirmDialog(null, outputStr + msgStr, "Confirm",
                        JOptionPane.YES_NO_OPTION,
                        JOptionPane.QUESTION_MESSAGE);
                if (resp == JOptionPane.NO_OPTION)
                    break;
            } else {
                msgStr = "Program cannot handle any more additional taxpayers.";
                JOptionPane.showMessageDialog(null, outputStr + msgStr, "Results",
                        JOptionPane.INFORMATION_MESSAGE);
                break;
            }
        }

        outputStr2 = "Taxpayer list:\n";
        for (int i = 1; i <= count; i++){
            switch (i) {
                case 1: t = t1; break;
                case 2: t = t2; break;
                case 3: t = t3; break;
                case 4: t = t4; break;
                case 5: t = t5; break;

            }
            outputStr2 += "\n" + i + ". " + t.getName() +

                    "\nTaxpayer Type: " + t.getClass().getName() + 

                    "\n    SSN: " + t.getSSNumber() +

                    "\n    Gross Pay: " + prec2.format(t.getGrossPay()) +
                    "\n    Tax for Pay Period: " + prec2.format(t.computeTax()) + "\n";
        }
        JOptionPane.showMessageDialog(null, outputStr2, "TAXPAYERS",
                JOptionPane.INFORMATION_MESSAGE);
    }
}

我是Java的新手,他正在实验室中练习简单的类层次结构以及实现和继承的使用。我有Main.Java作为驱动程序,Taxpayer.Java是超类,并且...

您可以执行以下操作:

class Parent {
    int x, y;

    public Parent(int x, int y) {
        this.x = x;
        this.y = y;
    }

    @Override
    public String toString() {
        return "Parent [x=" + x + ", y=" + y + "]";
    }
}

class Child extends Parent {
    int z;

    public Child(int x, int y, int z) {
        super(x, y);
        this.z = z;
    }

    @Override
    public String toString() {
        return super.toString() + "Child [z=" + z + "]";
    }
}

public class Main {
    public static void main(String[] args) {
        Child child = new Child(5, 10, 15);
        System.out.println(child);
    }
}

输出:

Parent [x=5, y=10]Child [z=15]
java oop subclass superclass
1个回答
-1
投票

您可以执行以下操作:

© www.soinside.com 2019 - 2024. All rights reserved.