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



请帮助我,我在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必须是静态

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

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

你应该做如下的事情:

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的值作为

干杯,

相关内容

  • 没有找到相关文章

最新更新