Java позволяет запустить приватный метод? Может кто-нибудь объяснить, почему?

64
10

Кто-то спросил меня, может ли он запустить функцию частной базы. Я сказал ему, что, конечно, это невозможно (кроме уловки переизбрания). Но что, черт возьми, это:

public class MyClass {
public static void main(String args[]) {

A a = new B();
a.doSomething();

B b = new B();
b.doSomethingMore();
}

static class A {
private void doSomething(){
System.out.println("something");
}
}

static class B extends A{
public void doSomethingMore(){
((A)this).doSomething();
}
}
}

спросил(а) 2021-01-25T18:59:28+03:00 4 месяца, 2 недели назад
1
Решение
77

A и B оба являются членами MyClass, поэтому они имеют доступ ко всем частным функциям MyClass и друг к другу частным функциям; и MyClass имеет доступ ко всем своим личным функциям. Подробнее в руководстве по вложенным классам Java.

Теперь, если бы они не были вложенными классами, то, естественно, MyClass не имел бы доступа к своим личным функциям и не имел бы доступа к частным функциям друг друга. Например, это не скомпилируется:

public class MyClass {
public static void main(String args[]) {
A a = new B();
a.doSomething(); // error: doSomething() has private access in A

B b = new B();
b.doSomethingMore();
}
}

class A {
private void doSomething(){
System.out.println("something");
}
}

class B extends A{
public void doSomethingMore(){
((A)this).doSomething(); // error: doSomething() has private access in A
}
}

ответил(а) 2021-01-25T18:59:28+03:00 4 месяца, 2 недели назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема