【问题标题】:Non-static variable cannot be referenced from a static context problem不能从静态上下文问题中引用非静态变量
【发布时间】:2020-03-10 14:36:05
【问题描述】:

在这段代码中,我需要创建一个扩展类 basicaccount 的对象,但我收到错误消息“无法从静态上下文引用非静态变量”我能做些什么更好?

public class BankAccount {
  private double balance;

  public BankAccount() {
    balance = 0;
  }

  public BankAccount(double initialBalance) {
    balance = initialBalance;
  }
  public void deposit(double amount) {
    double newBalance = balance + amount;
    balance = newBalance;
  }
   public void withdraw(double amount) {
    double newBalance = balance - amount;
    balance = newBalance;
  }

  public double getBalance() {
    return balance;
  }
class BasicAccount extends BankAccount {
    public BasicAccount(Double d) {
      balance = d;
    }
}
  class Main {
    public static void main(String args[]) {
      BankAccount account = new BasicAccount(100.00);
      double balance = account.getBalance(); //expected 100.00;
      account.withdraw(80.00);
      balance = account.getBalance(); //expected 20.00;
      account.withdraw(50.00);
      balance = account.getBalance(); //expected 20.00 because the amount to withdraw is larger than the balance
    }
  }
}

【问题讨论】:

  • 你能标出有警告的行吗?
  • 您似乎已将您的 BasicAccount 类放入您的 BankAccount 类中,使其成为内部类。这意味着您不能在没有BankAccount 的现有实例的情况下实例化BasicAccount。你可能不想那样做。避免在知道自己在做什么之前将类放在其他类中。

标签: java


【解决方案1】:

如果没有封装 BankAccount 对象,则无法实例化非静态嵌套类(BasicAccountMain)。要实例化 BasicAccount,您需要在现有的 BankAccount 对象上调用 new BasicAccount(...)

BankAccount account = new BankAccount().new BasicAccount(0);

但是我认为您可能不想要这个 - 如果是这种情况,我认为您应该将 BasicAccountMainBankAccount 内部移动。

【讨论】:

    【解决方案2】:
    1. 将 Main 设为您的公共课程。
    2. 从 BankAccount 类中删除 public
    3. 将 Main 类移出 BankAccount 类。
    4. 确保static main(String[] args)Main 公共类中。

    它应该是这样的

    class BankAccount {
        private double balance;
    
        public BankAccount() {
            balance = 0;
        }
    
        public BankAccount(double initialBalance) {
            balance = initialBalance;
        }
    
        public void deposit(double amount) {
            double newBalance = balance + amount;
            balance = newBalance;
        }
    
        public void withdraw(double amount) {
            double newBalance = balance - amount;
            balance = newBalance;
        }
    
        public double getBalance() {
            return balance;
        }
    
        class BasicAccount extends BankAccount {
            public BasicAccount(Double d) {
                balance = d;
            }
        }
    }
    
    public class Main {
        public static void main(String args[]) {
            BankAccount account = new BasicAccount(100.00);
            double balance = account.getBalance(); // expected 100.00;
            account.withdraw(80.00);
            balance = account.getBalance(); // expected 20.00;
            account.withdraw(50.00);
            balance = account.getBalance(); // expected 20.00 because the amount to withdraw is larger than the balance
        }
    }
    
    

    【讨论】:

      【解决方案3】:

      您似乎已将 BasicAccount 类放入您的 BankAccount 类中,使其成为内部类。这意味着如果没有 BankAccount 的现有实例,您将无法实例化 BasicAccount

      您可能不想这样做。我建议您在了解效果之前避免将类放入其他类中。

      BasicAccountMain 类移到BankAccount 类的定义之外。

      【讨论】:

        猜你喜欢
        • 2019-03-17
        • 2011-11-30
        • 1970-01-01
        相关资源
        最近更新 更多