静态和非静态上下文的Java继承问题

静态和非静态上下文的Java继承问题,java,inheritance,Java,Inheritance,请帮助我,我在Java代码中面临位问题。 我无法理解如何修复错误。 请帮忙 public class A { private int a = 100; public void setA(int value) { a = value; } public int getA() { return a; } } public class B extends A { private int a = 222;

请帮助我,我在Java代码中面临位问题。 我无法理解如何修复错误。 请帮忙

    public class A {

    private int a = 100;

    public void setA(int value) {
        a = value;
    }
    public int getA() {
        return a;
    }
}

public class B extends A {

    private int a = 222;

    public static void main(String[] args) {
        System.out.println("in main(): ");
        a = 123;
        System.out.println("a = "+super.a );
    }
}
我得到的错误是:


Main类中的int a必须是静态的


首先,您应该告诉我们错误:)

看起来您正试图从静态上下文(main方法是static)访问非静态上下文中的变量

您应该执行以下操作:

public class B extends A {

  public static void main(String[] args) {
    B b = new B();
    b.setA(123)
    System.out.println("a = " + b.getA());
  }
}

在子类中声明另一个“a”变量没有意义。如果您想直接访问“a”,可以将类a中的字段声明为受保护。

首先,在阅读代码之前要明确一点,您的两个类都是公共的,因此它们必须位于各自单独的文件中

现在让我们来看看你的代码。错误首先出现在主方法中的以下语句中:

a = 123;
您正在从静态上下文访问B的实例变量a—这是一个

第二:

  System.out.println("a = "+super.a );
A的实例变量A永远不会被B继承,因为它有一个私有访问修饰符。 如果要访问A的A,可以创建A的实例,并使用该实例调用getA()方法,该方法返回A的A的值


干杯,

有什么错误?Main类中的int a必须是静态的