【问题标题】:Reference of a non static variable非静态变量的引用
【发布时间】:2015-12-31 22:17:58
【问题描述】:

我有 Employe 类,其中包含 id 、 name ... 等变量以及从 Employe 继承 的其他 2 个类:Seller 和 收银员。 为了计算他们的薪水,我在 SellerCashier 中分别创建了一个方法,但我需要通过 Employe 中的 name getter 方法访问名称> 所以我有:

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

输入后,我收到一条错误消息,提示我需要将 name 变量设为静态,但我需要将其设为非静态,因为我正在使用 name 变量创建多个对象。 这个问题有什么解决办法吗?

编辑: 这是雇员类:

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 设置为静态,这将使每个对象都具有相同的名称

【问题讨论】:

  • 你能提供更完整的sn-p吗?如果没有更多上下文,很难给出有意义的答案。
  • 更改 Employee 类中 getter 的修饰符?由于卖家和收银员是继承的......否则使用您的代码发布minimal reproducible example
  • 那么,你想得到哪个卖家的名字?您是否想获取当前员工的姓名,但前提是它是卖家?
  • 问题是我的代码是法语的,我不知道你能不能得到它,但我会发布它。
  • 为什么首先是Seller中的方法?员工姓名不同是因为他是卖家还是收银员?

标签: java inheritance methods static


【解决方案1】:

您需要一个Seller 实例,才能调用getName()getSalary()

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

【讨论】:

    【解决方案2】:

    您肯定是在尝试从 static 方法访问实例变量。

    您在这里要做的是为您的class 创建一个instance,然后在创建的object 上调用getName() 方法。

    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
    

    【讨论】:

      【解决方案3】:

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

      或者代替 Seller.getName(),我使用 this.getName() 并且它有效。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-12-25
        • 1970-01-01
        • 2019-03-10
        • 1970-01-01
        • 2011-09-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多