Скачать презентацию Классы и методы Описание класса модификатор class Имя Скачать презентацию Классы и методы Описание класса модификатор class Имя

Java_Lecture2.ppt

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

Классы и методы Описание класса <модификатор> class <Имя. Класса> {[модификатор] <тип> <переменная_экземпляра 1>; … Классы и методы Описание класса <модификатор> class <Имя. Класса> {[модификатор] <тип> <переменная_экземпляра 1>; … [модификатор] <тип> <переменная_экземпляра. N>; [модификатор] <тип> <метод_класса 1>(<список форм. парам. ) { // тело метода; } … [модификатор] <тип> <метод_класса. М>(<список форм. парам. >) { // тело метода; } } 1

Классы и методы Описание класса class Point {int x, y; Point () Экземплярные переменные Классы и методы Описание класса class Point {int x, y; Point () Экземплярные переменные (instance variables) {x=0; y=0; } Point (int x 1, int y 1) Конструкторы Члены класса (class (перегруженные) members) {x=x 1; y=y 1; } int get. X() {return x; } int get. Y() {return y; } } Методы класса (methods) 2

Классы и методы Создание ссылочных переменных и объектов класса Point p 1; создана ссылочная Классы и методы Создание ссылочных переменных и объектов класса Point p 1; создана ссылочная переменная p 1 = new Point(); создан объект «короткая форма» создания объекта создана ссылочная переменная указывающая на p 1 Point p 2 = new Point(); Point p 3 = p 1; p 1 объект p 3 cсылка на p 1 3

Классы и методы Создание ссылочных переменных и объектов класса Cannot find variable p 1 Классы и методы Создание ссылочных переменных и объектов класса Cannot find variable p 1 Point p 1; { p 1 = new Point(5, 10); p 1 = null; } System. out. println(p 1. x + "" + p 1. y); 5, 10 {Point p 1 = new Point(5, 10); } System. out. println(p 1. x + "" + p 1. y); Null. Pointer. Exception Point p 2; {Point p 1 = new Point(5, 10); p 2 = p 1; p 1 = null; } System. out. println(p 2. x + “, “ + p 2. y); 4

Классы и методы Перегрузка (overloading) методов [модификатор] <тип> <имя_метода> (<список форм. парам. ) сигнатура Классы и методы Перегрузка (overloading) методов [модификатор] <тип> <имя_метода> (<список форм. парам. ) сигнатура метода Перегрузка – создание 2 и более методов с одинаковыми именами но разными сигнатурами 5

Классы и методы Перегрузка (overloading) методов class Overload. Demo {void test() {System. out. println(“Параметры Классы и методы Перегрузка (overloading) методов class Overload. Demo {void test() {System. out. println(“Параметры отсутствуют”); } void test(int a, int b) {System. out. println(“a и b: ” + a + ” “ + b); } void test(double a) {System. out. println(“Вещественное a: ” + a); } } 6

Классы и методы Модификатор static Статические переменные Объявление: static <type> <name> Обращение: <classname>. <varname> Классы и методы Модификатор static Статические переменные Объявление: static Обращение: . Статические переменные: • создаются в единственном экземпляре • существуют вне зависимости от объектов класса • создаются JVM в момент первого обращения к классу • допускают обращение до создания объектов класса 7

Классы и методы Модификатор static Статические методы Объявление: static <type> <name> (<parameters>) Обращение: <classname>. Классы и методы Модификатор static Статические методы Объявление: static () Обращение: . () Статические методы: • могут вызывать только другие статические методы данного класса • должны обращаться только к статическим переменным • внутри статических методов нельзя использовать ссылки this и super 8

Классы и методы Модификатор static Статические блоки кода Объявление: static { … } Статический Классы и методы Модификатор static Статические блоки кода Объявление: static { … } Статический блок кода выполняется один раз при первоначальной загрузке класса 9

Классы и методы Использование ключевого слова this 1. Чтобы обойти скрытие переменной экземпляра формальными Классы и методы Использование ключевого слова this 1. Чтобы обойти скрытие переменной экземпляра формальными параметрами Class Point { int x, y; Point (int x, int y) {this. x=x; this. y=y; } } 10

Классы и методы Использование ключевого слова this 2. Чтобы вызвать один конструктор из другого Классы и методы Использование ключевого слова this 2. Чтобы вызвать один конструктор из другого конструктора (explicit constructor invocation) public class Rectangle {private int x, y, w, h; public Rectangle() {this. x = 0; this. y = 0; this. w = 0; this. h = 0; } public Rectangle(int w, int h) {this. x = 0; this. y = 0; this. w = w; this. h = h; } public Rectangle(int x, int y, int w, int h) {this. x = x; this. y = y; this. w = w; this. h = h; } } 11

Классы и методы Использование ключевого слова this 2. Чтобы вызвать один конструктор из другого Классы и методы Использование ключевого слова this 2. Чтобы вызвать один конструктор из другого конструктора (explicit constructor invocation) public class Rectangle {private int x, y, w, h; public Rectangle() {this(0, 0, 0, 0); } public Rectangle(int w, int h) {this(0, 0, w, h); } public Rectangle(int x, int y, int w, int h) {this. x = x; this. y = y; this. w = w; this. h = h; } } 12

Классы и методы Вложенные классы Статические вложенные классы Нестатические вложенные классы (static nested classes) Классы и методы Вложенные классы Статические вложенные классы Нестатические вложенные классы (static nested classes) (inner classes внутренние классы) Причины создания вложенных классов: 1. Логическая группировка классов 2. Расширяет возможности инкапсуляции 3. В некоторых случаях повышает читабельность кода 13

Классы и методы Статические вложенные классы Статический вложенный класс является статическим членом класса, в Классы и методы Статические вложенные классы Статический вложенный класс является статическим членом класса, в который он вложен. Т. е. он не может напрямую работать с нестатическими переменными и методами внешнего класса. 14

Классы и методы Статические вложенные классы class A { static int x; int y; Классы и методы Статические вложенные классы class A { static int x; int y; A() { System. out. println("constructor A"); } static class B {B() { System. out. println("constrcutor B"); x = 5; public class Test { A a = new A(); public static void main(String[ ] args) a. y = 15; { A a = new A(); } A. B b = new A. B(); } } 15

Классы и методы Нестатические вложенные классы Нестатический вложенный класс является обычным членом внешнего класса, Классы и методы Нестатические вложенные классы Нестатический вложенный класс является обычным членом внешнего класса, т. е. существует только в составе объекта внешнего класса и имеет прямой доступ к переменным и методам внешнего класса. Объект вложенного класса может существовать только внутри объекта внешнего класса 16

Классы и методы Нестатические вложенные классы class A { static int x; int y; Классы и методы Нестатические вложенные классы class A { static int x; int y; A() { System. out. println("constructor A"); } class B { B() { System. out. println("constrcutor B"); x = 5; public class Test { y = 15; public static void main(String[ ] args) } { A a = new A(); } A. B b = a. new B(); } } } 17

Классы и методы Наследование Общая форма объявления класса, наследующего суперкласс: class <subclass_name> extends <superclass_name> Классы и методы Наследование Общая форма объявления класса, наследующего суперкласс: class extends { //тело класса } Язык Java не поддерживает множественного наследования классов!!! 18

Классы и методы Наследование class Point 3 D extends Point {int z; Point 3 Классы и методы Наследование class Point 3 D extends Point {int z; Point 3 D () { z=0; } Point 3 D (int x 1, int y 1, int z 1) { z=z 1; } } 19

Классы и методы Порядок вызова конструкторов при наследовании При создании объекта подкласса всегда вызывается Классы и методы Порядок вызова конструкторов при наследовании При создании объекта подкласса всегда вызывается конструктор его базового класса, у того конструктор его базового класса и т. д. вплоть до корня иерархии (класса Object). Причем если не указано явно (с помощью super) вызывается конструктор без параметров (созданный явно или по умолчанию). Если подходящего конструктора нет – выдается ошибка компиляции. 20

Классы и методы Ключевое слово super 1. Вызов конструктора непосредственного суперкласса super (parameters) – Классы и методы Ключевое слово super 1. Вызов конструктора непосредственного суперкласса super (parameters) – вызов должен быть первым в конструкторе подкласса Внимание! Это применяется только если надо вызвать конструктор суперкласса с параметрами! 2. Доступ к элементу суперкласса, скрытому элементом подкласса super. var_name или super. metod_name() (super не влияет на тип доступа) 21

Классы и методы Порядок вызова конструкторов при наследовании без использования super class Point 3 Классы и методы Порядок вызова конструкторов при наследовании без использования super class Point 3 D extends Point {int z; Point 3 D () { z=0; } Point 3 D (int x 1, int y 1, int z 1) { z=z 1; } Point 3 D p 3 d = new Point 3 D(); Point() -> Point 3 D() Point 3 D p 3 d = new Point 3 D(10, 20, 30); Point() -> Point 3 D(10, 20, 30) } 22

Классы и методы Порядок вызова конструкторов при наследовании с использованием super class Point 3 Классы и методы Порядок вызова конструкторов при наследовании с использованием super class Point 3 D extends Point {int z; Point 3 D () { z=0; } Point 3 D (int x 1, int y 1, int z 1) { super (x 1, y 1); Point 3 D p 3 d = new Point 3 D(); Point() -> Point 3 D() Point 3 D p 3 d = new Point 3 D(10, 20, 30); Point(10, 20) -> Point 3 D(10, 20, 30) z=z 1; } } 23

Классы и методы Модификаторы доступа class Parent class Other {public int v 1; { Классы и методы Модификаторы доступа class Parent class Other {public int v 1; { private int v 2; // доступны v 1, v 3, v 4 protected int v 3; class Child // недоступна v 2 int v 4; extends Parent } { } // доступны v 1, v 3, v 4 // недоступна v 2 } 24

Классы и методы Динамическая диспетчеризация ссылок Ссылочной переменной суперкласса может быть назначена ссылка на Классы и методы Динамическая диспетчеризация ссылок Ссылочной переменной суперкласса может быть назначена ссылка на любой подкласс, производный от этого суперкласса. Если ссылочная переменная суперкласса указывает на объект подкласса, через эту переменную можно получить доступ только к тем членам подкласса, которые определяются в суперклассе. 25

Классы и методы Динамическая диспетчеризация ссылок class Point Pobj = new Point(); { int Классы и методы Динамическая диспетчеризация ссылок class Point Pobj = new Point(); { int x, int y; Point 3 D Cobj = new Point 3 D(); Pobj = Cobj; } class Point 3 D extends Point { int z; } … Pobj. x = 1; //верно! x определена в Point Pobj. z = 10; //ошибка! z не определена в Point … 26

Классы и методы Динамическая диспетчеризация методов Переопределение метода (overriding) – создание в подклассе метода, Классы и методы Динамическая диспетчеризация методов Переопределение метода (overriding) – создание в подклассе метода, совпадающего по сигнатуре с методом суперкласса. Динамическая диспетчеризация методов – это механизм, позволяющий определить какой из переопределенных методов нужно вызвать, во время выполнения, а не во время компиляции. 27

Классы и методы Динамическая диспетчеризация методов class Figure class Rectangle extends Figure {double dim Классы и методы Динамическая диспетчеризация методов class Figure class Rectangle extends Figure {double dim 1, dim 2; {Rectangle(double a, double b) Figure(double a, double b) {super(a, b); } {dim 1 = a; dim 2 = b; } void square() {System. out. println (“Square is not defined”); } {System. out. println(“Rectangle square = ” + (dim 1*dim 2)); } } } 28

Классы и методы Динамическая диспетчеризация методов class Triangle extends Figure {Triangle(double a, double b) Классы и методы Динамическая диспетчеризация методов class Triangle extends Figure {Triangle(double a, double b) {super(a, b); } void square() {System. out. println(“Trian gle square= ” + (dim 1*dim 2/2)); } } class Find. Square {public static void main(String args[ ]) {Figure f; Random r = new Random(); for (int k=0; k<10; k++) { int i = r. next. Int(100); if (i<50) { f = new Rectangle(9, 5); } else { f = new Triangle(10, 8); } f. square(); } } } 29

Классы и методы Динамическая диспетчеризация методов Вывод этой программы: Rectangle square = 45. 0 Классы и методы Динамическая диспетчеризация методов Вывод этой программы: Rectangle square = 45. 0 Triangle square= 40. 0 Rectangle square = 45. 0 30

Классы и методы Абстрактные методы и классы Объявление абстрактного метода: abstract <type> <method_name> (<parameters>); Классы и методы Абстрактные методы и классы Объявление абстрактного метода: abstract (); Если в классе есть хотя бы один абстрактный метод -> класс должен быть объявлен абстрактным. abstract class { … } Любой подкласс абстрактного класса должен или реализовать все его абстрактные методы или сам должен быть объявлен абстрактным ! 31

Классы и методы Абстрактные методы и классы abstract class Figure {double dim 1, dim Классы и методы Абстрактные методы и классы abstract class Figure {double dim 1, dim 2; Figure(double a, double b) {dim 1 = a; dim 2 = b; } abstract void square(); } 32

Интерфейсы [<модификатор>] interface <имя> [extends <список интерфейсов>] { <тип> <имя_метода>(<список параметров>); . . . Интерфейсы [<модификатор>] interface <имя> [extends <список интерфейсов>] { <тип> <имя_метода>(<список параметров>); . . . <тип> <имя_константы> = <значение>; } 1. Интерфейсы допускают множественное наследование 2. Все методы – абстрактные (без модификатора abstract) 3. Все переменные – static и final (без соотв. модификаторов), необходима инициализация 4. Все переменные и методы – public (без модификатора) 33

Интерфейсы Реализация интерфейсов class <имя_класса> [extends <имя_суперкласса>] [implements <список интерфейсов>] { …} interface Callback Интерфейсы Реализация интерфейсов class <имя_класса> [extends <имя_суперкласса>] [implements <список интерфейсов>] { …} interface Callback {void callback(int param); } class Client implements Callback {void callback(int p) {System. out. println("callback called with " + p); } } 34

Интерфейсы Реализация интерфейсов Особенности реализации интерфейсов: 1. Методы, которые реализуют интерфейс, должны быть объявлены Интерфейсы Реализация интерфейсов Особенности реализации интерфейсов: 1. Методы, которые реализуют интерфейс, должны быть объявлены как public. Сигнатура типа реализующего метода должна точно соответствовать сигнатуре типа, указанной в определении интерфейса. 2. Если класс включает интерфейс, но реализует не все его методы, то такой класс должен быть объявлен как абстрактный. 3. Если класс реализует интерфейс, унаследованный от другого интерфейса, класс должен реализовать все методы, определенные в цепочке наследования интерфейсов. 35

Интерфейсы Ссылочные переменные интерфейсного типа interface Callback {void callback(int param); } class Client implements Интерфейсы Ссылочные переменные интерфейсного типа interface Callback {void callback(int param); } class Client implements Callback { public void callback(int p) //реализация метода интерфейса {System. out. println("callback called with " + p); } int get. Square(int p) //собственный метод класса {System. out. println("square = " + (p*p)); } } 36

Интерфейсы Ссылочные переменные интерфейсного типа class Test. Iface {public static void main(String args[ ]) Интерфейсы Ссылочные переменные интерфейсного типа class Test. Iface {public static void main(String args[ ]) {Callback с = new Client(); c. callback(42); //верно! c. get. Square(42); //ошибка! ссылочная переменная интерфейсного типа не может обращаться к собственным методам классов } } 37

Классы и методы Модификатор final 1. final double pi = 3. 14; //неизменяемая переменная Классы и методы Модификатор final 1. final double pi = 3. 14; //неизменяемая переменная 2. final int get. X() {…} //метод, для которого запрещено переопределение (overriding) 3. final class A {…} //класс, для которого запрещено наследование 38

Классы и методы Класс Object – вершина иерархии классов библиотеки Java • Object clone() Классы и методы Класс Object – вершина иерархии классов библиотеки Java • Object clone() – создает новый объект, являющийся копией вызывающего • boolean equals(Object object) – определяет, является ли один объект равным другому • void finalize() – завершающие действия перед вызовом gc • String to. String() – возвращает строку, содержащую описание вызывающего объекта. Этот метод вызывается автоматически, когда объект выводится методом print() или println(). Многие классы переопределяют данный метод, приспосабливая описание специально для типов объектов, которые они создают. 39

Пакеты Понятие пакета Java обеспечивает специальный механизм для разделения пространства имен классов на именованные Пакеты Понятие пакета Java обеспечивает специальный механизм для разделения пространства имен классов на именованные области. Этот механизм называется «пакеты» (packages). Пакет – это контейнер для классов, в пределах которого должна сохраняться уникальность имен классов. Общая форма определения пакета: package ; 40

Пакеты Иерархия пакетов: package pkg 1[. pkg 2[. pkg 3]]; Чтобы хранить пакеты, Java Пакеты Иерархия пакетов: package pkg 1[. pkg 2[. pkg 3]]; Чтобы хранить пакеты, Java использует каталоги файловой системы. Classфайлы для всех классов, принадлежащих к одному пакету, должны быть сохранены в каталоге, название которого совпадает с именем пакета (регистр важен). package java. awt. image; javaawtimage Размещением корня любой иерархии пакетов в файловой системе управляет специальная переменная окружения CLASSPATH. 41

Пакеты Импорт пакетов Полное имя класса включает всю иерархию пакетов. Импорт класса или пакета: Пакеты Импорт пакетов Полное имя класса включает всю иерархию пакетов. Импорт класса или пакета: import pkg 1[. pkg 2]. (classname|*); 1. Импортирование класса никак не влияет на уровень доступа к его элементам !!! 2. В любую Java-программу автоматически импортируется пакет java. lang. * !!! 42

Пакеты Уровни доступа с учетом пакетов package p 1; package p 2; class A Пакеты Уровни доступа с учетом пакетов package p 1; package p 2; class A { class D extends A { public int p 1; } protected int p 2; class E { int p 3; } private int p 4; } class B extends A { } class C { } 43

Пакеты Уровни доступа с учетом пакетов A B C D E p 1 + Пакеты Уровни доступа с учетом пакетов A B C D E p 1 + + + p 2 + + - p 3 + + + - - p 4 + - - 44

Пакеты Уровни доступа с учетом пакетов 1. Доступ на уровне класса: - public - Пакеты Уровни доступа с учетом пакетов 1. Доступ на уровне класса: - public - класс виден везде - - класс виден в пределах своего пакета 2. Доступ на уровне членов класса: Модификатор Внутри В том же класса пакете Подкласс в другом пакете Произвольный класс в другом пакете public + + protected + + + - + + - - private + - - 45

Структура Java-программы - В первой строке файла может быть 1 необязательный оператор package - Структура Java-программы - В первой строке файла может быть 1 необязательный оператор package - В следующих строках может быть 1 или несколько необязательных операторов import - Далее идут описания классов и интерфейсов Среди классов, описанных в одном файле, только один может быть объявлен с модификатором public. 46