Скачать презентацию Язык программирования JAVA Пакеты Управление доступом Пакеты Скачать презентацию Язык программирования JAVA Пакеты Управление доступом Пакеты

Лекция 2 (Classes).ppt

  • Количество слайдов: 48

Язык программирования JAVA Пакеты Управление доступом Язык программирования JAVA Пакеты Управление доступом

Пакеты n n Пакет – специальная структура для группировки логически связанных классов. Состоит из Пакеты n n Пакет – специальная структура для группировки логически связанных классов. Состоит из файлов классов и каталогов файловой системы Пространство имен используется для идентификации загружаемых классов. Имена классов должны быть уникальны в одном пространстве имен

Группировка классов в пакеты n n Для включения класса в пакет достаточно прописать имя Группировка классов в пакеты n n Для включения класса в пакет достаточно прописать имя пакета в разделе package определения класса Если пакет явно не задан, то класс принадлежит к «пакету по умолчанию» Для создания структуры каталогов используется опция –d компилятора javac Для запуска метода main() класса определенного пакета необходимо указать: ¡ ¡ CLASSPATH, указывающей на тот каталог, в котором находится класс Имя класса должно быть полным, т. е. предваряться именем пакета

Пример package ru. vsu. cs. java; public class Square{. . . } c: > Пример package ru. vsu. cs. java; public class Square{. . . } c: > javac –d c: javaprojectsbin Square. java c: javaprojectsbin ru vsu cs java Square. class c: javaprojectsbin > java ru. vsu. cs. java. Square

Пакеты и CLASSPATH n В CLASSPATH нужно включать каталог верхнего уровня, от которого начинается Пакеты и CLASSPATH n В CLASSPATH нужно включать каталог верхнего уровня, от которого начинается структура каталогов пакета c: javaprojectsbin ru vsu cs java Square. class c: > SET CLASSPATH=C: javaprojectsbin

Управление доступом n Java контролирует доступ к классам, свойствам и методам через использование модификаторов Управление доступом n Java контролирует доступ к классам, свойствам и методам через использование модификаторов доступа ¡ ¡ private protected public нет модификатора

Управление доступом n Класс ¡ n Свойство ¡ n public или нет модификатора (private) Управление доступом n Класс ¡ n Свойство ¡ n public или нет модификатора (private) private, protected, public, нет Метод ¡ private, protected, public, нет

Управление доступом Private No modifier Protected Public Не подкласс в том же пакете Подкласс Управление доступом Private No modifier Protected Public Не подкласс в том же пакете Подкласс в другом пакете Не подкласс в другом пакете Тот же класс Подкласс в том же пакете

Управление доступом n Методы имеют доступ ко всем private полям не только класса, но Управление доступом n Методы имеют доступ ко всем private полям не только класса, но и объекта своего класса! public class Square{ private int line. Width; public boolean bigger. Than. Two(Square sq){ return sq. line. Width > 2; } }

Язык программирования JAVA Наследование Абстрактные классы Интерфейсы Язык программирования JAVA Наследование Абстрактные классы Интерфейсы

Наследование n Свойство объекта, заключающееся в том, что характеристики одного объекта (объектапредка) могут передаваться Наследование n Свойство объекта, заключающееся в том, что характеристики одного объекта (объектапредка) могут передаваться другому объекту (объектупотомку) без их повторного описания.

Синтаксис public class Super. Class { … } public class Sub. Class extends Super. Синтаксис public class Super. Class { … } public class Sub. Class extends Super. Class { … }

Наследование свойств и методов n n Подкласс наследует все свойства и методы родителя Доступ Наследование свойств и методов n n Подкласс наследует все свойства и методы родителя Доступ из потомка к private свойствам родителя не разрешен

Наследование n Базовым классом для всех классов является Object ¡ ¡ ¡ equals() finalize() Наследование n Базовым классом для всех классов является Object ¡ ¡ ¡ equals() finalize() hash. Code() to. String() clone() get. Class()

Метод equals() n n n Метод предназначен для сравнения двух объектов на равенство При Метод equals() n n n Метод предназначен для сравнения двух объектов на равенство При сравнении с использованием == сравнивается равенство адресов объектов Строка – объект ¡ ¡ “abc” == “abc”. equals(“абц”)

Метод finalize() n n n Если объект работает с ресурсами, то он должен освободить Метод finalize() n n n Если объект работает с ресурсами, то он должен освободить эти ресурсы перед тем, как он будет удален из памяти Для этого используется метод finalize() Метод вызывается перед тем, как объект будет убран из памяти Время, когда будет вызван finalize() не определено finalize() – это НЕ ДЕСТРУКТОР

Процесс создания экземпляра подкласса n n Подкласс не наследует конструкторы суперкласса Если для под- Процесс создания экземпляра подкласса n n Подкласс не наследует конструкторы суперкласса Если для под- и суперкласса не указаны конструкторы: ¡ ¡ Сначала вызывается конструктор по умолчанию для суперкласса Затем для подкласса

super n n n Ссылка на базовый класс Часто используется в конструкторах Вызов super() super n n n Ссылка на базовый класс Часто используется в конструкторах Вызов super() должен быть первым оператором в конструкторе public class Super. Class { public Super. Class(int i){ property = i; } } public class Sub. Class extends Super. Class { public Sub. Class(int i){ super(i); } }

Перекрытие методов n n n Методы суперкласса могут быть перекрыты в подклассе Метод считается Перекрытие методов n n n Методы суперкласса могут быть перекрыты в подклассе Метод считается перекрытым в подклассе , если он имеет такую же сигнатуру, что и в суперклассе Область видимости метода подкласса должна быть не ниже области видимости метода суперкласса

Вызов методов суперкласса Методы суперкласса вызываются при помощи super. имя. Метода() n public class Вызов методов суперкласса Методы суперкласса вызываются при помощи super. имя. Метода() n public class Super. Class {. . . public String get. Summary(){. . . } } public class Sub. Class extends Super. Class { public String get. Summary(){. . . s = super. get. Summary(); . . . } }

Подкласс == Суперкласс ? n n Можно присваивать переменной суперкласса ссылку на подкласс При Подкласс == Суперкласс ? n n Можно присваивать переменной суперкласса ссылку на подкласс При вызове методов суперкласса выполняются методы подкласса (полиморфизм) public static void main (String[] args){. . . Super. Class s = new Sub. Class(); s. get. Summary(); . . . }

Полиморфизм public class Super. Class{ public void say. Hello(){ System. out. println(“Hello!”); } } Полиморфизм public class Super. Class{ public void say. Hello(){ System. out. println(“Hello!”); } } public class Sub. Class extends Super. Class{ public void say. Hello(){ System. out. println(“Hi!”); } }. . . Super. Class s = new Sub. Class(); s. say. Hello(); . . . Hi!

Динамическое связывание n Автоматический выбор нужного метода во время выполнения программы. Динамическое связывание n Автоматический выбор нужного метода во время выполнения программы.

Порядок выполнения вызова метода n Предположим, что вызывается метод с именем my. Method(arg 1) Порядок выполнения вызова метода n Предположим, что вызывается метод с именем my. Method(arg 1) объекта x класса С ¡ Определяются все методы с именем my. Method ¡ Определяются методы с нужными сигнатурами (при необходимости производится приведение типов) ¡ Если метод private, static, final или конструктор, то его адрес известен заранее, производится статическое связывание ¡ В противном случае вызывается версия метода, соответствующая ФАКТИЧЕСКОМУ типу объекта, на который ссылается переменная x ¡ Для ускорения поиска таблица адресов методов строится заранее

Оператор instanceof n n Класс объекта может быть определен при помощи оператора instanceof Объектная Оператор instanceof n n Класс объекта может быть определен при помощи оператора instanceof Объектная ссылка может быть приведена к нужному типу public static void main (String[] args){. . . Super. Class s = new Sub. Class(); s. get. Summary(); . . . if (s instanceof Sub. Class){ Sub. Class sc = (Sub. Class) s; // ((Sub. Class) s). do. Sub. Class. Method(); sc. do. Sub. Class. Method(); } }

Модификатор final n n Модификатор final запрещает наследование классов и перекрытие методов (в подклассе Модификатор final n n Модификатор final запрещает наследование классов и перекрытие методов (в подклассе не может быть создан метод с такой же сигнатурой) Причины использования final ¡ ¡ Скорость выполнения Безопасность

Абстрактные классы n n Абстрактные классы используются как основа для создания «реальных» классов Нельзя Абстрактные классы n n Абстрактные классы используются как основа для создания «реальных» классов Нельзя создать экземпляр абстрактного класса

Синтаксис public abstract class Person{. . . public String get. Summary(){. . . } Синтаксис public abstract class Person{. . . public String get. Summary(){. . . } } public class Employee extends Person{. . . }

Абстрактные методы n Методы, не имеющие реализации ¡ ¡ ¡ Заготовка для последующей реализации Абстрактные методы n Методы, не имеющие реализации ¡ ¡ ¡ Заготовка для последующей реализации Могут быть только в абстрактных классах Должны быть реализованы в неабстрактных подклассах

Синтаксис public abstract class Person{. . . public abstract float get. Salary(); } public Синтаксис public abstract class Person{. . . public abstract float get. Salary(); } public class Employee extends Person{. . . public float get. Salary(){ return salary+salary*0. 1; } }

Интерфейс n n n Подобен полностью абстрактному классу Интерфейс – список заголовком методов без Интерфейс n n n Подобен полностью абстрактному классу Интерфейс – список заголовком методов без реализации Нельзя создать экземпляр интерфейса Класс может реализовывать один или несколько интерфейсов Обычно именуются существительным с «able» : Comparable, Cloneable и т. д.

Синтаксис public interface Writable{ int MAX=400; . . . String interface. Method(String s); . Синтаксис public interface Writable{ int MAX=400; . . . String interface. Method(String s); . . . } n n Все методы – public abstract Все свойства – public static final

Использование public class New. Class extends My. Class implements Writable{. . . public String Использование public class New. Class extends My. Class implements Writable{. . . public String interface. Method(String s){. . . } n Методы интерфейса должны иметь реализацию (исключение – абстрактные классы)

Использование Абстрактные классы и интерфейсы могут быть использованы как типы аргументов и методов n Использование Абстрактные классы и интерфейсы могут быть использованы как типы аргументов и методов n public class New. Class extends My. Class implements Writable{. . . } public class SClass {. . . public Writable s. Method(){ return new New. Class(); } }

Оператор instanceof n n Оператор используется для проверки того, что класс реализует заданный интерфейс Оператор instanceof n n Оператор используется для проверки того, что класс реализует заданный интерфейс Возможно приведение к типу интерфейса с последующим возовом метода

Язык программирования JAVA Внутренние классы Язык программирования JAVA Внутренние классы

Внутренние классы n n Классы объявленные внутри других классов Четыре типа внутренних классов ¡ Внутренние классы n n Классы объявленные внутри других классов Четыре типа внутренних классов ¡ ¡ Статические Классы-свойства Локальные Анонимные

Объявление статического внутреннего класса n n Определяется на уровне класса Имеет доступ только к Объявление статического внутреннего класса n n Определяется на уровне класса Имеет доступ только к статическим свойствам и методам внешнего класса public class Outer{ private static float var. Float = 3. 50 f; private String var. String; . . . static class Inner. Static{ var. Float = 4. 51 f; . . . } }

Объявление внутреннего класса -свойства n n n Определяется на уровне класса Необходим экземпляр внешнего Объявление внутреннего класса -свойства n n n Определяется на уровне класса Необходим экземпляр внешнего класса Для доступа к экземпляру внешнего класса используется this public class Outer extends Super. Class{ private static float var. Float = 3. 50 f; private String var. String; . . . class Inner. Member{ var. Float = 4. 51 f; . . . Outer. this. var. String = “Hi, outer!”; Outer. super. set. Int. Property(23); } }

Внутренний класс-свойство n n n Применяется как «окно» в структуру класса Для передачи параметров Внутренний класс-свойство n n n Применяется как «окно» в структуру класса Для передачи параметров Для реализации интерфейсов (обработка событий)

Объявление внутреннего локального класса Определяется в методе Доступ только к final переменным Нет конструктора Объявление внутреннего локального класса Определяется в методе Доступ только к final переменным Нет конструктора Не может иметь статических свойств и методов n n public class Outer extends Super. Class{ public void outer. Method (final int param 1){ final int var 1 = 4; class Inner. Local{ private int local. Var = param 1+var 1; } Inner. Local inner. Loc = new Inner. Local(); }

Объявление анонимных внутренних классов Определяются на уровне метода Ключевые слова class, extends, implements не Объявление анонимных внутренних классов Определяются на уровне метода Ключевые слова class, extends, implements не используются Нет конструктора n n n public class Outer extends Super. Class{ public void outer. Method (){ Comparable c = new Comparable(){ public int compare. To(Object o){. . . } } c. compare. To(local. Var); } }

Компиляция n Внутренние классы компилируются в файлы. class вида: Outer. Class$Inner. Class. class Компиляция n Внутренние классы компилируются в файлы. class вида: Outer. Class$Inner. Class. class

Преимущества использования внутренних классов n n Внутренний класс имеет доступ к закрытым данным внешнего Преимущества использования внутренних классов n n Внутренний класс имеет доступ к закрытым данным внешнего класса Внутренний класс можно скрыть от других классов того же пакета Удобны при создании программ, реагирующих на события Безымянные классы применяются при реализации обратных (callback) вызовов

Использование внутренних классов Обработчики событий ¡ Внутренние классы, реализующие интерфейс Action. Listener, часто используются Использование внутренних классов Обработчики событий ¡ Внутренние классы, реализующие интерфейс Action. Listener, часто используются в качестве обработчиков событий

Пример (обработчик закрытия окна) import java. awt. event. *; import javax. swing. *; public Пример (обработчик закрытия окна) import java. awt. event. *; import javax. swing. *; public class My. Frame extends JFrame { public My. Frame() { super(); add. Window. Listener(new Window. Adapter() { public void window. Closing(Window. Event we) { System. exit(0); } }

Пример (обратный вызов) import java. awt. event. Action. Event; import java. awt. event. Action. Пример (обратный вызов) import java. awt. event. Action. Event; import java. awt. event. Action. Listener; import java. util. Date; import javax. swing. JOption. Pane; import javax. swing. Timer; public class Timer. Printer { public static void main(String[] args) { Action. Listener listener = new Action. Listener(){ public void action. Performed(Action. Event event){ System. out. println(new Date()); } }; JOption. Pane. show. Message. Dialog(null, "Hi"); Timer t = new Timer (1000, listener); t. start(); } }

Вопросы? Вопросы?