Подводя итог предыдущему содержанию, объект относится к определенной вещи, а класс относится к типу объекта. Объекты могут иметь состояния и действия, то есть члены данных и методы.
До сих пор члены данных и методы были открыты как для внутренних, так и для внешних пользователей. Внутри объекта мы используем это для вызова членов данных и методов объекта. Вне объекта, например, когда мы вызываем объект в другом классе, мы можем использовать члены object.data и object.method() для вызова членов данных и методов объекта.
Мы собираемся инкапсулировать члены объекта (члены включают элементы данных и методы), тем самым позволяя вызывать извне только некоторые члены. Используя инкапсуляцию, мы можем повысить удобство использования и безопасность объектов.
Инкапсуляция и интерфейс
Инкапсуляция — это общий термин для компьютеров, который означает сохранение ограниченного внешнего интерфейса и сокрытие конкретных деталей реализации. Например, в архитектуре Linux вы можете видеть, что операционная система Linux инкапсулирует конкретные детали базового оборудования, сохраняя только интерфейс системных вызовов. Пользователь находится вне пакета и может выполнять необходимые операции только через интерфейс.
Инкапсуляция очень распространена в жизни. Например, вот аккумуляторный фонарик:
Даже не читая инструкцию, пользователь может догадаться о работе фонаря: переключение и зарядка. В этом фонаре используется пластиковый корпус, который скрывает внутренние детали, к которым пользователям не нужно прикасаться, оставляя только два интерфейса: переключатель и электрическую вилку. Используя эти два интерфейса, пользователям достаточно использовать функции, для достижения которых предназначен продукт. Если пользователю будут доступны все детали одновременно, он почувствует себя ошеломленным продуктом (например, пультом дистанционного управления без оболочки ниже). Таким образом, инкапсуляция повышает удобство использования продукта.
Если товар не упакован, пользователю будут видны многие детали фонаря или пульта дистанционного управления: аккумулятор, электрическая схема, герметичная резинка и т. д. Хотя это позволяет пользователям более свободно управлять продуктом, например, напрямую разряжать батарею, вынимать светодиодную лампу и т. д. Однако пользователи часто подвергаются большему риску повреждения продукта. Следовательно, инкапсуляция повышает безопасность продукта.
Программный продукт Java аналогичен обычному продукту. Внутри объекта может быть множество членов (членов данных и методов). Некоторые члены данных и методы используются только внутри. На данный момент мы надеемся иметь механизм «упаковки» объекта для его инкапсуляции. Таким образом, пользователи могут легче изучать и использовать внешние интерфейсы без необходимости обращаться к внутренним участникам.
Инкапсуляция членов объекта
Java использует три ключевых слова для управления внешней видимостью членов объекта: public, Private, protected.
1.public: элемент виден извне, то есть элемент является частью интерфейса.
2.частный: этот участник не виден снаружи и может использоваться только внутри, и к нему нельзя получить доступ извне.
(защищенный включает в себя концепцию наследования, которая будет обсуждаться позже)
Давайте сначала инкапсулируем ранее определенный класс Human:
Скопируйте код кода следующим образом:
тест публичного класса
{
public static void main(String[] args)
{
Человек aPerson = новый Человек(160);
System.out.println(aPerson.getHeight());
aPerson.growHeight(170);
System.out.println(aPerson.getHeight());
aPerson.repeatBreath(100);
}
}
классЧеловеческий
{
/**
* конструктор
*/
общественный человек (int h)
{
this.height = ч;
System.out.println("Я родился");
}
/**
*аксессуар
*/
публичный int getHeight()
{
вернуть this.height;
}
/**
* мутатор
*/
public voidrowHeight(int h)
{
this.height = this.height + h;
}
/**
* инкапсулированный, для внутреннего использования
*/
личное дыхание пустоты()
{
System.out.println("ху...ху...");
}
/**
* вызвать дыхание()
*/
public void повторениеBreath(int Rep)
{
интервал я;
for(i = 0; я <rep; я++) {
это.дыхание();
}
}
Private int height // инкапсулировано, для внутреннего использования;
}
Инкапсуляция не влияет на внутренние методы. Внутренние методы человека могут вызывать любой член, даже функции height и Breath(), для которых установлено значение Private.
Внешние методы могут вызывать только публичные члены. Когда мы находимся за пределами Human, например, в Test, мы можем вызывать только членов, указанных в Human как общедоступные, но не членов, указанных как частные.
Благодаря инкапсуляции класс Human сохраняет в качестве интерфейсов только следующие методы:
1.getHeight()
2.growHeight()
3.repДыхание()
Мы можем представить класс Human и его интерфейс следующим образом:
«Пульт с чехлом»
Если мы заставим высоту вызова из основного:
Скопируйте код кода следующим образом:
System.out.println(aPerson.height);
Будет следующее сообщение об ошибке:
Скопируйте код кода следующим образом:
Test.java:6: высота имеет частный доступ в Human
System.out.println(aPerson.height);
^
1 ошибка
Бип, тебя ударило током! Член, объявленный как частный, не может быть вызван извне.
В обычной спецификации Java элементы данных, которые выражают состояние (например, высоту), установлены как закрытые. Изменения членов данных должны выполняться с помощью методов, предоставляемых интерфейсом (таких как getHeight() и GroveHeight()). Эта спецификация играет роль в защите данных. Пользователи не могут напрямую изменять данные и должны использовать соответствующие методы для чтения и записи данных. Разработчики классов могут добавлять спецификации использования данных к методам интерфейса.
инкапсуляция класса
В файле .java есть и может быть только один класс с ключевым словом public, например класс Test, указанный выше. Итак, из любого другого класса мы можем напрямую вызвать этот класс. У человеческого класса нет ключевого слова. Раньше члены наших объектов не имели ключевых слов. Отсутствие ключевых слов также представляет собой своего рода наглядность, которую я буду подробно рассматривать при объяснении пакетов.
Попрактикуйтесь в инкапсуляции класса Torch для представления фонарика. Интерфейс имеет переключение и зарядку. Внутренние члены обладают властью.
Подвести итог
инкапсуляция, интерфейс
частный, общественный