Проблема наследования Java со статическим и нестатическим контекстом

#java #inheritance

#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 );
    }
}
  

Ошибка, которую я получаю,:

int a в классе Main должен быть статическим

Комментарии:

1. В чем ошибка?

2. int a в классе Main должен быть статическим

Ответ №1:

Прежде всего, вы должны сообщить нам об ошибке :).

Похоже, вы пытаетесь получить доступ к переменной в нестатическом контексте из статического контекста (основной метод является статическим).

Вы должны сделать что-то вроде приведенного ниже:

 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 как защищенное.

Ответ №2:

Прежде всего, просто для ясности перед переходом к коду, ваши 2 класса, учитывая, что они оба общедоступны, должны находиться в своих отдельных файлах.

Теперь давайте перейдем к вашему коду. Ошибка заключается сначала в этих операторах внутри вашего основного метода:

 a = 123;
  

Вы получаете доступ к переменной экземпляра B a из статического контекста — это один.

Второй:

   System.out.println("a = " super.a );
  

Переменная экземпляра a A никогда не наследуется B, поскольку она имеет модификатор частного доступа.
Если вы хотите получить доступ к a a, вы можете создать экземпляр A и использовать его для вызова метода getA(), который возвращает значение A a

Приветствия,