Что такое пример защиты, предпочтительный, но не общедоступный? Может ли кто-нибудь разработать его с примерами? Я уже видел чат для публичных, частных и защищенных (see here).Почему мы защитили спецификатор доступа в java?
ответ
Первичное использование protected
- это случаи, когда подкласс отменяет метод, который предоставляет некоторые внутренние детали, которые вы не хотите показывать внешним классам. Рассмотрим класс как
class BaseAlgorithm {
run() {
commonStepOne();
subclassSpecificStepTwo();
}
protected abstract subclassSpecificStepTwo();
}
Никто не должен быть вызывающим subclassSpecificStepTwo
, так что не имеет смысла иметь его общедоступным.
... но имейте в виду, что 'protected' также будет доступен из других классов внутри одного пакета. –
Правильно, нет модификатора, который просто разрешает доступ к подклассам, так что да, классы в одном пакете могли бы вызвать это. Но в этом случае вы вряд ли сможете это сделать. –
@JeffStorey спасибо ... –
Проще говоря, protected
означает, что метод (например) будет доступен только в подклассах и в пакете, в котором он определен.
Modifier | Class | Package | Subclass | World ————————————+———————+—————————+——————————+——————— protected | ✔ | ✔ | ✔ | ✘ ————————————+———————+—————————+——————————+———————
Подробнее:
Awesome ASCII table. –
если метод защищен, то она может быть доступна в рамках одного пакета или из подкласса различного пакета
Имейте см. oracle docs
Вопрос об использовании и использовании, поэтому у меня есть пример.
Рассмотрите класс , который потребует от него подкласса реализовать какой-либо метод, который не является частью его общедоступного API и используется только внутри этого класса или его подклассов.
Мы не можем использовать частный модификатор, мы не хотим, чтобы этот метод был общедоступным.
Итак, ключевое слово protected
делает наш API понятным и предотвращает разрыв инкапсуляции.
Вам нужен пример кода?
Все эти private, public, protected or no-access modifiers(default)
- это всего лишь концепция разработки, чтобы сделать кодирование хорошо организованной манерой.
Вы можете найти полезную информацию от here. Ответ, который вы ищете, есть.
Но нет такой защиты, скрытой информации с использованием любого из этих модификаторов в Java
Рассматривают следующий код
public class ProtectedPrivacy{
private String getInfo1(){
return "private";
}
protected String getInfo2(){
return "protected";
}
String getInfo3(){
return "default";
}
public String getInfo4(){
return "public";
}
}
Любой уровень доступа вы можете нарушить следующим
public class BreakModifires{
public static void main(String[] args) throws Exception {
ProtectedPrivacy protectedPrivacy = new ProtectedPrivacy();
Method method = protectedPrivacy.getClass().getDeclaredMethod("getInfo*", null);
method.setAccessible(true);
Object result = method.invoke(protectedPrivacy);
System.out.println(result.toString());
}
}
A public
член класса делает обещание для всей вселенной от имени все возможные будущие производные и под-производные класса, что все производные этого класса будут поддерживать определенную функциональность определенным образом.
protected
защищенного член дает обещание от имени самого только для любых классов, производные от него, что он будет поддерживать конкретные функции определенный образом; производные этого класса могут решить, хотят ли они воспользоваться этой функциональностью или предоставить какие-либо общедоступные методы, которые ее использовали бы.
Причина, по которой public
обещания являются обязательными для подклассов и protected
из них не является, что если подклассы не были связаны публичными обещаниями своих родителей, не было бы никакого способа для кода, который имел ссылку на Animal
может смело назвать MakeNoise
на нем, не зная, был ли он типом, не требующим наличия члена MakeNoise
. Напротив, если класс имеет защищенный член, единственный способ, которым может быть вызван этот элемент, - через super
. Если Animal
реализован защищенный DetectSmells
элемент и Cat
поддержали его, но Fish
не сделал, тот факт, что Fish
не поддерживает этот метод не будет влиять на способность SiameseCat
«s назвать super.DetectSmells()
, , так как он знает, что super
является Cat
и не Fish
.
- 1. Опуская спецификатор доступа в java
- 2. Относительный спецификатор частного доступа в java?
- 3. = default игнорирует спецификатор доступа?
- 4. Спецификатор доступа для декларации интерфейса
- 5. Спецификатор доступа по умолчанию Java доступен за пределами пакета?
- 6. Почему спецификатор доступа по умолчанию разрешен для интерфейсов?
- 7. По умолчанию спецификатор доступа в Java доступен извне класса
- 8. Спецификатор доступа при переопределении методов
- 9. Почему Java не хватает спецификаторов доступа?
- 10. Полиморфизм - спецификатор доступа изменены в производном классе
- 11. Может ли объект иметь спецификатор доступа?
- 12. Имеет ли спецификатор доступа для функции друга?
- 13. Спецификатор доступа для отношений Has-A
- 14. Спецификатор доступа наследования по умолчанию C++?
- 15. Что такое спецификатор доступа класса реализации jsp?
- 16. Почему мы не можем назначить более слабые привилегии в подклассе
- 17. Почему мы используем rt.jar в проекте java?
- 18. Почему мы используем этот код в JAVA?
- 19. Почему мы Массивы и массив в Java
- 20. Почему мы используем конкретные кланы в java?
- 21. Почему спецификатор захвата необязателен в списках захвата?
- 22. пользовательский спецификатор в javascript/jquery
- 23. Спецификатор доступа для поплавка не ведет себя так, как ожидалось
- 24. Есть ли какое-либо ограничение для указания спецификатора доступа для членов класса, когда мы указали спецификатор доступа для класса?
- 25. Почему существует специальный модификатор доступа в абстрактном классе на Java, хотя мы не можем создать экземпляр абстрактного класса?
- 26. Какие компиляторы C++ используют спецификатор доступа в имени mangling?
- 27. частный спецификатор в php
- 28. Java: почему мы получаем Matcher из шаблона
- 29. Почему мы должны увеличить кучу Java?
- 30. Java Doublebuffer - Почему мы очищаем открытую область?
Частный означает, что только ваш класс может его использовать. Защищенный означает, что вы и ваши дети можете его использовать. Это полезно, когда вы хотите скрыть что-то из общего использования, но нужно предоставить подклассам дополнительную информацию. – Trenin