这里的错误在哪里?

时间:2015-01-06 03:51:39

标签: java inheritance override

我发现一种情况要求我在各种编码位置发现错误。这里我们有两个班级

作为超类

的A类
package TestSes;

public class A {
    private int a = 100;

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

这就是它的子类

package TestSes;

public class TestA extends A {
    private int a = 222;

    public static void main(String[] args) {
        System.out.println("in main(): ");
        System.out.println("a = "+a );
        a = 123;
    }
}

我想知道这里的错误。请特别关于变量的完整解释 一个。如何更正此代码才能使其正常工作?

2 个答案:

答案 0 :(得分:4)

您尝试访问并为静态main方法中的非静态变量a赋值。那是不可能的。 a必须与类TestA的实例相关联,因此在没有实例的情况下无法访问它。

答案 1 :(得分:0)

您的代码中有两个问题。

  1. 您的变量a是一个实例变量,意味着它属于类TestA上的一个对象。如果没有TestA实例,您无法访问它。但是,在您的静态main方法中,您正在访问它而没有TestA

  2. 的实例
  3. 您的超类TestSes有一个实例变量a,但它不会被继承到您的子类,因为您的超类变量是私有的。