singlepost

В чем разница между public, protected и private? << На главную или назад  

не могу разобратся в public, protected и private
во всех учебниках (и т.п.) написано по-разному
хер поймешь
объясните пожалуйста по-русски
заранее спасибо

60 ответов в теме “В чем разница между public, protected и private?”

  1. 34
    Макс Донцов ответил:

    Все говорите почти одно и то же, только разными словами…Хотя насчет protected в Java правильно сказано.

  2. 33
    Татьяна Журавская ответил:

    достаточно ссылочек? нашел значит ответ?

  3. 32
    Леонид Максимов ответил:

    мне было достаточно :)

  4. 31
    Татьяна Журавская ответил:

    прошу прощения, помилилась:)
    …а проще всего дать человеку кучу ссылок на английском языке и со своей высокой башни говорить кто прав, а кто нет:)
    вы меня, конечно извините, но человек попросил поподробнее.

  5. 30
    Аристарх Анонимусов ответил:

    Насколько я понимаю, Татьяна говорит о простом наследовании и виртуальных функциях. Виртуальное же наследование — это "disambiguation of the diamond problem". Поправьте меня, пожалуйста, где я не прав.

  6. 29
    Жека Кирпичев ответил:

    Прав :)

  7. 28
    Жека Кирпичев ответил:

    Татьяна, ты ошибаешься, виртуальное наследование означает абсолютно не то, что ты сказала. Освежи свои знания С++ с помощью приведенной мною ссылки :)

  8. 27
    Татьяна Журавская ответил:

    если не ошибаюсь, виртуальное наследование подразумевает, что функция, объявленная в базовом классе как виртуальная в классах-наследниках может быть переопределена, таким образом ее реализация для вызова будет определяться во время ее исполнения.

  9. 26
    Жека Кирпичев ответил:

    //www.google.com/search?client=opera&rls=en... :)

  10. 25
    Леонид Максимов ответил:

    не совсем понятно, что значит виртуальное наследование (правило 4). можно ли поподробнее?

  11. 24
    Юрий Солнцев ответил:

    Для НАЧИНАЮЩЕГО можно предложить простые правила:
    - делай все члены-данные private (кроме констант);
    - делай все члены-методы public;
    - делай все вложенные типы public;
    - наследуй по public (и virtual С++);
    - избегай friend-ов, пока не прижмет. :)
    Если нужен доступ к данным извне класса, пиши Get/Set методы.
    Никогда не возвращай из метода неконстантный указатель на член-данных (в C++).

    P.S. Просьба не пинать, правила для _начинающих_!

  12. 23
    Юрий Солнцев ответил:

    программисты вас только запутают. :) ))
    Дали определение видимости (visibility) public/private/protected для членов класса – и все.
    Дальше вычисляйте, пользуясь аналогией, что любой базовый (наследуемый) класс – это своего рода член в производном классе.
    Так что если член (базовый класс) виден, то далее все его члены видны или не видны в соответствии с их видимостью.
    Если будет понятнее, можете составить табличку. Но только сами ее составьте.

  13. 22
    Айрат Халиков ответил:

    Спасибо

  14. 21
    Андрей Куликов ответил:

    Значит что с таким модификатором доступа они меняют элементы родительского класса при наследовании.
    public – оставляет все как есть
    protected – наследдует публичные члены как protected
    private – наследует все как private

  15. 20
    Айрат Халиков ответил:

    что значит private, protected & public – наследования

  16. 19
    DELETED DELETED ответил:

    а что именно непонятно?

  17. 18
    Айрат Халиков ответил:

    чето я не совсем понял про наследования…
    объяните пожалуйста

  18. 17
    Жека Кирпичев ответил:

    +1

  19. 16
    Леонид Максимов ответил:

    поделюсь :)
    по поводу C++:

    private – никто кроме методов класса и друзей (как классов, так и функций/операторов) обратиться не может
    protected – к ним могут обращаться еще и потомки класса
    public – доступно всем

    private-наследование:
    protected -> private
    public -> private

    protected-наследование:
    protected -> private (тут я не совсем уверен, но вроде верно)
    public -> protected

    public-наследование:
    protected -> protected
    public -> public

  20. 15
    Алексей Злобин ответил:

    мда… а вы спрашиваете "что за учебники такие" :) ) 6 вариантов и все разные…

  21. 14
    Андрей Куликов ответил:

    Да понял уже, что описка:

    >> а в C# и C++ – только в пакете.

    ))

  22. 13
    Жека Кирпичев ответил:

    А я про пакеты в С++ ничего и не говорил.
    Я просто говорил, что в С++ protected виден только наследникам, а в джаве не только.

  23. 12
    Андрей Куликов ответил:

    Ну да кстати, про protecded я чето ступил. )) Спать надо больше, а вот что ты имел про пакеты в C++ так и не понял. )
    Или там тоже описка и имелись ввиду наследники?

  24. 11
    Жека Кирпичев ответил:

    Ошибаешься.
    //java.sun.com/docs/books/jls/third_edition/htm...

    В java 4 уровня доступа – public, private, protected, package local (default).
    public – всем
    private – только самому классу, внутренним классам и ближайшему внешнему
    protected – пакет + наследники
    default – только пакет

  25. 10
    Андрей Куликов ответил:

    Э не совсем так. В Java как раз есть именно пакетный доступ – который видно в текущем пакете – то что по умолчанию. Вышеупомянутый internal, это походу некий его аналог.
    А вот protected там самый обычный, как везде, как в С++. В С++ так вобще понятия пакет нету, какой там только в пакете?

  26. 9
    Жека Кирпичев ответил:

    Ну кстати есть как минимум 2 различных толкования protected: в java такие члены видны в наследниках и в пакете, а в C# и C++ – только в пакете.

  27. 8
    Роман Решетников ответил:

    да, на различные я ьоже бы посмотрел.
    всегда пож этим подразумевалось одно и тоже, при чем во всех объектных языках

  28. 7
    DELETED DELETED ответил:

    Мля, что тут может быть непонятно?
    public – видим везде
    pritected – видив в этом и наследуемых классах
    private – только в этом классе и больше накося выкуси
    А не могли бы вы педоставить трактовку этих понятих, хотелось бы взглянуть на различные толкования.

  29. 6
    Алексей Голубев ответил:

    А в шарпе еще и internal ввели. Это аналог public, но видим только в пределах текущей сборки (под сборкой обычно подразумевается dll).

  30. 5
    Аристарх Анонимусов ответил:

    "во всех учебниках (и т.п.) написано по-разному" — что же это за учебники такие?

  31. 4
    Жека Кирпичев ответил:

    Господи боже мой… Причем тут – изменять? Причем тут "методы базового класса должны быть сокрыты"?

    Все эти свойства влияют на область видимости.

    public class MyClass {
    private int secretVariable;
    protected int variableForChildren;
    public int variableForEveryone;
    }

    secretVariable видна только из методов MyClass.
    variableForChildren видна только из методов MyClass и его наследников.
    variableForEveryone видна всем отовсюду.
    Вот и все.

  32. 3
    Max Tyslenko ответил:

    ну… думаю, что сам смысл одинаковый.
    private, public, protected используют в классах, структурах для показания
    типа показа даных.
    Public: все члены будут открыты для использования. Т.Е. Ты можешь свободно обращаться к ним.
    Prшvate: члены закрыты. Могут использоваться только методами своего класса, или же дружественными ф-циями.
    Protected:используется при наследовании классов. Производной класс не имеет доступа к защищенным даным родительского класса. Бывают моменты, когда этот доступ нужен, но одновременно методы базового класса должны быть сокрыты… Тогда используют protected

  33. 2
    Алексей Веселков ответил:

    На пальцах выглядит так:

    public – свойство, которое означает, что объект можно изменять из любого класса или метода

    private -объект можно изменять только в том классе, где он объявлен

    protected – объект можно изменять в том классе, где он объявлен но не в дочернем классе (подклассе) от класса, в котором объявлен объект

  34. 1
    Жека Кирпичев ответил:

    Какой язык – C++ , Java, C#?

Клуб программистов работает уже ой-ой-ой сколько, а если поточнее, то с 2007 года.