引用非静态变量

时间:2015-10-03 23:44:32

标签: java inheritance methods static

我的班级员工包含id,name等变量以及其他2个从Employe继承的类:卖家出纳即可。 为了计算他们的工资,我在卖家收银员的每一个中创建了一个方法,但我需要通过员工所以我有:

System.out.println("The salary is "+Seller.getName() +" is : " +salary);

一旦我键入它,我得到一个错误,说我需要将名称变量设置为静态,但我需要它作为非静态,因为我使用name变量创建多个对象。 解决这个问题的方法是什么?

编辑: 这是Employe类:

public class Employe {
protected int id;
protected  String name;
protected String adresse;
protected int nbrHours;

public Employe () {
}

public Employe (int id, String name, String adresse, int nbHours)
{
    this.id=id;
    this.name=name;
    this.adresse=adresse;
    this.nbrHours=nbHours;
}

public int getId() {
    return id;
}

public void setId(int id) {
    this.id = id;
}

public  String getName() {
    return name;
}

public void setNom(String name) {
    this.name = name;
}

public String getAdresse() {
    return adresse;
}

public void setAdresse(String adresse) {
    this.adresse = adresse;
} 

}

这是卖家类:

public class Seller extends Employe {
private int prime;
public Seller (int id, String name, String adresse, int nbHours,int prime)
{
    super(id,name,adresse,nbHours);
    this.prime=prime;
}

public int getPrime() {
    return prime;
}

public void setPrime(int prime) {
    this.prime = prime;
}

@Override
public String toString() {

    return super.toString() +" [prime=" + prime + "]";
}

public void salaireSeller ()
{
    int salaire = 0;
    if(nbrHours<160)
    {
    salaire = nbrHours * 10 + prime;
    System.out.println("La salaire de "+Responsable.getName() +" est : " +salaire);
    }
    else if(nbrHours >160)
    {
        int Extra= (160 - nbrHours) * 12;
        int salaire1 = 160 * 10000 + prime;
        salaire= Extra + salaire1;
        System.out.println("La salaire de "+Seller.getName() +" est : " +salaire);
    }

}

在Main类中,我创建了一个Seller对象:

Seller Sel1 = new Seller(2, "Alex", "Miami", 18, 200);

现在我想在Main课程中使用SalaireSeller()方法计算其薪水:

Sel1.salaireSeller();

但在卖方课程中:

System.out.println("La salaire de "+Responsable.getName() +" est : " +salaire);

它说我需要将Name设置为static,这将为每个对象提供相同的名称

3 个答案:

答案 0 :(得分:2)

您需要Seller个实例,才能拨打getName()getSalary()

Seller s = new Seller();
// ...
System.out.println("The salary is " + s.getName() + 
        " is : " + s.getSalary());

答案 1 :(得分:0)

您当然正在尝试从static方法访问实例变量。

您要在此处创建instance class,然后在创建的getName()上调用object方法。

Seller sell = new Seller();
sell.setName("Jean-Paul"); // This is just an example
System.out.println("His name is " + sell.getName()); // Prints : His name is Jean-Paul

答案 2 :(得分:0)

我想出了一个解决方案,我只需要在Employee类中将名称添加到toString()方法,然后将salary变量添加到Seller类中的toString()方法,而不需要System.out.println(.. )在SalaireSeller()。

或者代替Seller.getName(),我使用this.getName()并且它可以工作。