Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
metod_OOP2012.doc
Скачиваний:
0
Добавлен:
01.03.2025
Размер:
584.19 Кб
Скачать

Модификаторы доступа

В Java предусмотрено 4 вида модификаторов – public, protected, default(или пакетный, при этом ключевого слова для данного уровня доступа не предусмотрено см. Строку 1.10) и последний тип – private. Наличие различных модификаторов доступа обусловлено необходимостью реализовать в языке одну из важнейших особенностей ООП- инкапсуляцию. Инкапсуляция предполагает разделение поведения и свойств(атрибутов) классов на внешние, доступные другим классам , и внутренние, о которых внешним классам ничего не известно. Цель инкапсюляции- уйти от зависимости внешнего интерфейса класса(то , что могут использовать другие классы) от реализации. Чтобы малейшее изменение в классе не влекло за собой изменение внешнего поведения класса. Соответственно , максимально открытый уровень доступности – это public , максимально защищенный уровень – это private.

Public-уровень предполагает доступ к компоненту с этим модификатором из экземпляра любого класса и любого пакета.

Protected - уровень предполагает доступ к компоненту с этим модификатором из экземпляров родного класса и классов-потомков, независимо от того в каком пакете они находятся.

Default-уровень предполагает доступ к компоненту с этим модификатором из экземпляров любых классов , находящихся в одном пакете с этим классом.

Private- уровень предполагает доступ к компоненту с этим модификатором только из этого класса.

Для разных структурных элементов класса предусмотрена возможность применять только определенные уровни модификаторов доступа.

Для класса- только public и default.

Для свойств(атрибутов) класса – все 4 вида.

Для конструкторов – все 4 вида.

Для методов- все 4 вида.

Инициализация переменных , типы переменных.

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

Ссылочными типами называются такие, для которых в ячейке памяти (ссылочной переменной) содержатся не сами данные, а только адреса этих данных, то есть ссылки на данные. При присваивании в ссылочную переменную заносится новый адрес, а не сами данные. Но непосредственного доступа к адресу, хранящемуся в ссылочных переменных, нет. Это сделано для обеспечения безопасности работы с данными. В отличии от С++ в Java отсутствует возможность работы с указателями.Существуют следующие примитивные типы данных- char,short,byte,int,long,float,double,boolean. К ссылочным типам относятся ссылки на экз. любых классов , а также массивы любых типов данных , в том числе и простых. Примеры объявления и инциализации переменных приведены ниже :

Примитивные типы

  1. Листинг :

    1. char ch1=34;

    2. char ch2 , qw ;

    3. ch2=’q’;

    4. byte byt1=7;

    5. short shor1=32000;

    6. int in1=12;

    7. long lon1=12L;

    8. float fl1=12.34f;

    9. double db1=12.34;

    10. boolean bool1=false;

Обратите внимание на строки 2.2-2.3- это пример отложенной инициализации, когда происходит только объявление переменной , а первоначальное значение присваивается далее в коде, но до первого обращения к переменной. При обращении к переменной после ее объявления , тип переменной не указывается.

Ссылочные типы

Листинг 3:

    1. Human hum3=new Human();

    2. Human hum4=new Human("Сидоров С.П.");

    3. Human hum5=new Human("Ричард Бах",74, "г. Николаев ,"+ "ул. Мархлевского 45",new Date(),"1234567890");

    4. ArrayList ar_list1=new ArrayList();

    5. int[] ar_int34=new int[10];

    6. int[] ar_int38={1,3,2,56,45};

    7. String str1="Это строка";

    8. String str2=new String(str1);

    9. String str3=new String("Это также строка");

Отличие объявления и инициализации ссылочных переменных заключается в использовании ключевого слова =new= вместе с одним из конструкторов класса. В строках 3.1-3.3 вы видите 3 разных способа создания экземпляров переменных, тип которых соответствует классу Human , при этом используются 3 разных вида конструктора этого класса. Все они(конструкторы) описаны в Листинге 1(1.16—1.31).

Синтаксис объявления и инициализации встроенных классов и классов собственной разработки , не отличается. Это видно на примере создания ссылки на экземпляр класса ArrayList(строка 3.4).

Некоторые особенности создания и инициализации экземпляров класса String и массивов видны в строках 3.5-3.9

Второй вид классификации переменных – по месту объявления. В зависимости от того в какой части класса объявлена переменная , необходимо, знать ряд особенностей их использования. Переменные класса или атрибуты класса объявляются при описании класса(пример –строки 1.10-1.14 Листинга 1). Обычно их инициализация происходит в конструкторах класса(Листинг 1 строка 1.9-1.31). Для них предусмотрена инициализация по умолчанию(она есть только у переменных класса). Так для атрибутов класа всех числовых типов , эти атрибуты инициализируются по умолчанию =0=, все ссылочные типы инициализируются нулевой ссылкой для которой предусмотрено ключевое слово =null= Локальные переменные – это переменные объявленные в теле любого метода класса или конструктора . Область видимости данных переменных начинается с момента объявления их в методе класса до конца метода. в котором они объявлены. Влиять на видимость локальной переменной в теле метода , возможно , с помощью фигурных скобок {}. Например :

Листинг 4.

    1. public int metod1(){

    2. int var_int=12;

    3. {

    4. String temp_str="значение 1";

    5. }

    6. int temp_str=45+var_int;

    7. return temp_str ;

    1. }

На примере этого листинга , видно , что объявление переменной temp_str в методе строка 4.4 не мешает объявить переменную в строке 4.6 с таким же именем и другого типа , благодаря тому , что видимость переменной , объявленной в строке 4.3 ограничена областью {}(строка 4.3, 4.5 ). Наличие локальной области не мешает

Использовать переменную var_int в строке 4.6.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]