Доступ к члену класса предоставляется только методам этого класса, снаружи нельзя к ним обратиться.
Пример: контроль за созданием объекта
class Sundaу {
private Sundaу {}
static Sundaу makeАSundaу(){
return new Sundaу();
}
}
................
//Sundaу x = new Sundaу();-ошибка
Sundaу x = Sundaу.makeASundaу();
Нельзя создать этот объект с помощью конструктора.
Protected
Класс – потомок получает доступ к public и protected членам.
Protected - это доступ и в пределах пакета, и доступ в классах-наследниках.
Интерфейс и реализация
Контроль над доступом – это сокрытие реализации (инкапсуляция). Цель:
1) ограничить доступ клиентов к внутренним методам и полям реализации.
2) Разделение интерфейса и реализации – можно изменять реализацию (все что не public) не изменяя интерфейс (public).
Поэтому при описании класса рекомендуется сначала указывать public – члены.
Доступ к классам
1) Доступ public – класс открыт программистам – клиентам
package access
public class Widget {}
Клиент может обратиться к классу: например, import access.Widget;
2) Доступ пакетный – класс служебный. Только для пользования внутри пакета access (без public).
|
|
Нельзя классы объявлять private или protected.
Создание объекта - одиночки
Создание такого класса, который позволяет создать только один объект (Singleton)
class Soup2{
private Soup2 (){} //должен быть хотя бы один закрытый конструктор, иначе
будет создан конструктор по умолчанию с доступом
класса
private static Soup2 ps1 = new Soup2();
public static Soup2 access (){
return ps1;
}
public void f() {}
}
public class Lunch {
public static void main (String[] args){
Soup2 soup2 = Soup2.access();
Soup2.access.f();
soup2.f();
}
}
Объект Soup2 – статическая приватная переменная (существует только в одном экземпляре).
class Soup3
private Soup3 (){}
private Soup3 ps1;
public static Soup getInstance(){
if (ps1= = null)
{ps1 = new Soup3;}
return ps1;
}
}
Design pattern- паттерны проектирования. Методы решения типовых задач, схемы проектирования. Впервые систематизированы и изложены для С++ в
Гамма, Хелм, Джонсон,Влиссидес «Приемы объектно-ориентированного проектирования. Паттерны проектирования». Питер,2006 – Это книга «GoF»-Gang of Four(банды четырех).
В ней описано 23 паттерна. Каждый разработчик обязан их знать.
Тема 7
Повторное использование классов
Наследование и композиция позволяют создать новые классы (типы) на основе существующих.
Композиция – строится новый класс из объектов существующих классов.
Наследование (inheritance) - к существующему классу добавляется свой код, без изменения существующего класса.