使用继承时Java操作数错误,但在单个类上执行相同操作时则不会

时间:2014-02-11 00:41:14

标签: java

首先,是的,这是家庭作业(但我自己做的工作)。我一直在努力,但我无法理解我做错了什么。

该作业要求销售人员基本工资和佣金两个班级。

我相信你以前见过这个,但我找不到其他帖子。

我的基本工资等级。

package salescommission;

public class SalesBaseSalary {

    public SalesBaseSalary() {

        int baseSalary = 75000;

    }
}

和我的销售佣金课程

package salescommission;

//Adding Scanner Utility
import java.util.Scanner;


public class SalesCommission extends SalesBaseSalary {
    public static void main(String[] args) {
        //Scanner input
        Scanner input = new Scanner( System.in );
        int totalSales;
        int salesPlusSalary;

        //input commissions        
        System.out.print( "Enter Annual Commissions" );
        totalSales = input.nextInt();

        salesPlusSalary = (int) (totalSales * .05 + SalesBaseSalary);

        System.out.printf( "Sales commission plus Salary is %d\n", salesPlusSalary );  
    }
}

现在如果我把它作为一个班级,它完美地工作......但我必须有两个。这是单一课程。

package salescompensation;

//Adding Scanner Utility
import java.util.Scanner;

//Main Class representing the employees base salary
public class SalesCompensation {

    public static void main(String[] args) {
        //Scanner input
        Scanner input = new Scanner( System.in );
        int totalSales;
        int salesPlusSalary;
        //base salary    
        double baseSalary = 75000;    
        //input commissions        
        System.out.print( "Enter Annual Commissions" );
        totalSales = input.nextInt();

        salesPlusSalary = (int) (totalSales * .05 + baseSalary);

        System.out.printf( "Sales commission plus Salary is %d\n", salesPlusSalary );

    }

}

我正在试图弄清楚我做错了什么以及为什么我可以学习。

2 个答案:

答案 0 :(得分:1)

salesPlusSalary = (int) (totalSales * .05 + SalesBaseSalary);

这一行是主要问题。

您正在尝试将类(SalesBaseSalary)添加到double。该类不是其中的一个字段,您必须访问它(通过例如new SalesBaseSalary().baseSalary或getter)。

为了使它工作,你还必须在构造函数之外声明该字段,否则它不存在于构造函数范围之外:

public class SalesBaseSalary {

    int baseSalary;

    public SalesBaseSalary()
    {
        baseSalary = 75000;
    }

(编辑:刚看到SalesBaseSalary是SalesCommission的超类,所以在这种情况下,您将能够直接访问其非私有字段,但它们仍然必须存在于构造函数之外。)

答案 1 :(得分:1)

要扩展sheltem的答案,你应该从SalesCommission类的实例获取字段(假设它不是类常量)。

public static void main(String[] args) 
{
   // Create an instance of the SalesCommission class (an object)
   SalesCommission salesCommission = new SalesCommission();

   //Scanner input
   Scanner input = new Scanner( System.in );
   int totalSales;
   int salesPlusSalary;

   //input commissions        
   System.out.print( "Enter Annual Commissions" );
   totalSales = input.nextInt();

   salesPlusSalary = (int) (totalSales * .05 + SalesCommission.baseSalary);

   System.out.printf( "Sales commission plus Salary is %d\n", salesPlusSalary );  
}

此外,由于您刚刚掌握了Java,OOP和课程等,我建议您使用The Java Tutorials或其他类似资源,并检查您的设计以及如何使其更好。通过努力提高你将学习OOP和良好的设计/实践。