无法在静态上下文中访问方法

时间:2014-03-09 17:51:46

标签: inheritance methods static-methods

我是一名相当新手的高中程序员,我正在完成我上学的最后项目继承。我有一个名为“工人”的项目,这真的让我很难过。我需要能够打印出所有内容,但我似乎无法打印出我需要的内容,无需打印出来或获取“静态上下文错误中无法访问的方法”。以下是名为worker的超类的代码:

package mod6;

public class Worker {

   public Worker(double wage, String name) {
       private double hours; // I GET AN ERROR HERE that says "illegal start of expression"
       private double wage;
       private int rate;
       private String name;


   public double computePay(int hours) {
       return hours * rate;
   }

   public String getName(String name) {  
       String temp[] = name.split("\\s");
       char initial = temp[0].charAt(0);
       String lname = temp[1];
       return name = (lname + ", " + initial + ".");
   }
}

编辑:我现在唯一的问题是上面的工人类的第7行中的错误。 这里是WorkerTester类的代码,我目前没有得到正确的输出:

package mod6;

public class WorkerTester extends Worker {

  public WorkerTester(double wage, String name, int hours) {
      super(wage, name); 
  }

  public static void main(String[]args) {
  System.out.println("Type" + "\t" + "Name" + "\t" + "Wage" + "\t" + "Hours" + "\t" + "Number of Pieces" + "Income"); } //**Nothing prints out below this line**
  public void TestHourly() {
      HourlyWorker John = new HourlyWorker(9.48, "John Doe", 43);
      System.out.print("Hourly" + "\t" + getName("John Doe")  + "\t" + "9.48" + "\t" + "43" + "\t" + "n/a" + "\t" + John.Wage());
  }
  public void TestSalaried() {
      SalariedWorker Karen = new SalariedWorker(25.79, "Karen Jones", 52);
      System.out.println("Salaried" + "\t" + getName("Karen Jones")  + "\t" + "25.76" + "\t" + "52" + "\t" + "n/a" + "\t" + Karen.Wage());
  }
  public void TestPiece() {
      SalariedWorker Wesley = new SalariedWorker(5.65, "Wesley Smith", 36);
      System.out.println("Piece" + "\t" + getName("Wesley Smith")  + "\t" + "5.65" + "\t" + "36" + "\t" + "1025" + "\t" + Wesley.Wage());
  }
}

这可能是一个简单的解决方案,我只是无法用我有限的编程知识解决这个问题,而且我没有重新安排代码的想法。此外,编码可能是非常错误的(记住我是新手)所以请记住这一点。如果有人可以帮我修复这段代码以便正确打印出来,那就太好了!感谢。

以下是SalariedWorker类供参考:

公共类SalariedWorker扩展了Worker {

public SalariedWorker(double wage, String name, int hours) {

    super(wage, name);

}

public double Wage() {

    return computePay(40);

}

}

1 个答案:

答案 0 :(得分:0)

您在main方法中声明了未调用的其他方法。删除方法,只需在main方法中实例化,初始化和打印所有worker。

此外,您在没有worker实例的情况下调用getName。你需要这样的东西。

Worker worker = new Worker(//pass your parameter);
worker.getName();

老实说,你错误地使用了getter方法,适当的getter应该返回私有变量或者对它进行一些小操作,而不是编辑你传递它的参数。

这是一个更好的吸气剂:

public String getName() {  
   String temp[] = name.split("\\s");
   char initial = temp[0].charAt(0);
   String lname = temp[1];
   return (lname + ", " + initial + ".");
}

这样你就可以引用私有的实例变量名,而不是你最初传入方法的参数“name”