Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 无法从静态上下文问题引用非静态变量_Java - Fatal编程技术网

Java 无法从静态上下文问题引用非静态变量

Java 无法从静态上下文问题引用非静态变量,java,Java,在这段代码中,我需要创建扩展类basicaccount的对象,但我得到错误消息“非静态变量不能从静态上下文引用”,我能做得更好吗 public class BankAccount { private double balance; public BankAccount() { balance = 0; } public BankAccount(double initialBalance) { balance = initialBalance; } pu

在这段代码中,我需要创建扩展类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

你可能不想那样做。我建议您在理解效果之前,避免将类放在其他类中

BasicAccount
Main
类移动到
BankAccount
类定义之外。

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

BankAccount account = new BankAccount().new BasicAccount(0);
然而,我认为您可能不希望这样-如果是这样的话,我认为您应该将
BasicAccount
Main
从内部
BankAccount

  • 让Main成为你的公共课
  • 从BankAccount类中删除公共帐户
  • 将主类移到BankAccount类之外
  • 确保
    static main(String[]args)
    main
    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;
            }
        }
    }
    
    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
        }
    }
    
    

    你能在有警告的地方标出行吗?你好像把你的
    BasicAccount
    类放在你的
    BankAccount
    类里面,使它成为一个内部类。这意味着如果没有现有的
    BankAccount
    实例,就无法实例化
    BasicAccount
    。你可能不想那样做。在你知道自己在做什么之前,避免把类放在其他类中。这能回答你的问题吗?