Идентификатор static
имеет здесь определенную цель, которую многие люди не сразу схватывают. Я собираюсь взять ваш код и немного изменить его.
public class A {
private int a;
public A(int a) {
this.a = a;
}
public class B {
public void show() {
System.out.println(a);
}
}
}
Теперь, что происходит в классе B
? Поскольку B
является нестатическим классом, он имеет доступ к другим нестатическим членам класса A
. По сути, он утверждает, что каждый объект класса A
имеет свой собственный вкус объектов класса B
, даже если они считаются функционально одинаковыми. Для нас, чтобы получить то же поведение, если B
был статический класс:
public class A {
private int a;
public A(int a) {
this.a = a;
}
public int getA() { return a; }
public static class B {
public void show(A a) {
System.out.println(a.getA());
}
}
}
Здесь это означает, что аромат B
объектов не меняется в зависимости от объекта A
создал его. Класс B
является статическим, так что он не может получить доступ к нестационарным членам объекта класса A
, который его создал, и должен явно получить доступ к этим элементам из любого объекта A
, с которым он хочет взаимодействовать.
В предыдущей реализации объект B
мог бы легко получать доступ к полям и нестационарным методам объекта A
, который его создал.
Это два разных поведения, и часто ясно, что именно соответствует вашей цели.
У экземпляра 'B' нет неявной ссылки на экземпляр' A' –
Спасибо всем за такие подробные ответы. Однако я мог только принять его, хотя все были информативными. –