2010-10-21 3 views
3

в этом коде:
доступа частные методы, использующие объекты

public class Main{ 
    private void method() 
    { 
     System.out.println("inside method"); 
    } 
    public static void main(String[] args) { 
    Main obj = new Main(); 
    obj.method(); 
    } 
} 

Почему мы можем получить доступ к закрытому методу с использованием объекта из класса, когда мы в классе, в то время как мы не можите сделать это за пределами класса ? (Я имею в виду, что является логической причиной?)

Другой случай: метод main является статическим, поэтому почему нет ошибки компилятора, жалующейся на «доступ к нестационарному методу из статического метода»?

ответ

6
  1. Потому что его частные. Сам класс может использовать свои частные свойства и поведение. Причина, по которой внешние классы не могут использовать это, заключается в том, чтобы помешать внешним классам вмешиваться в частные дела. Простой, не так ли?

  2. Здесь вы фактически вызываете метод, используя контекст экземпляра. Попробуйте позвонить без obj, он определенно пожалуется. Кстати, кто сказал, что вы не можете получить доступ к нестационарному методу из статического метода . Фактически вы не можете вызывать нестатические методы в статическом контексте .

2

Ответ на ваш второй вопрос: - вы вызов метода с помощью объекта этого класса, но если вы будете напрямую вызвать метод, это даст вам ошибку, для доступа к нонам статического метода от статического метода ,

И первые один: - вы вызываете метод внутри класса, который может использовать свои закрытые член

3

Вашей Путаница происходит от непонимания о том, каких private средства. Ключевое слово private указывает, что член доступен только в контексте объявляющего класса `, не только из контекста содержащего экземпляра. Вы можете называть частные методы самостоятельно (наиболее распространенными) или другими экземплярами того же или производного типа (как вы демонстрируете).

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

Смежные вопросы