#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
Приветствия,