Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

java-lekcii-2016-01-17 / presentation-oct-24

.docx
Скачиваний:
16
Добавлен:
27.03.2016
Размер:
24.39 Кб
Скачать

Классы и объекты

Объект – программная сущность, объединяющая состояние (поля, переменные) и поведение (методы, функции).

Класс – шаблон, по которому создаются объекты.

В 99% случаев каждый класс должен создаваться в отдельном файле.

Модификаторы видимости

Private – виден только этому классу

Package-private – виден всем классам в этом пакете (используется по умолчанию)

Protected – виден этому классу и всем потомкам

Public – виден всем классам

Классы могут быть только package-private или public. Поля и методы могут иметь любой модификатор.

Пример класса

package ru.mami; // Название пакета, к которому относится класс

public class User { // Объявление класса с именем User и видимостью public

private String name; // Поле (переменная) класса. Видна из всех методов.

/**

* Конструктор, используется для создания класса. Не имеет возвращаемого

* значения (всегда возвращает созданный объект класса).

* Название должно соответствовать названию класса. В остальном работает

* как обычный метод (может иметь входные параметры и т.п.)

*

* Если у класса только один конструктор и он ничего не делает (как в

* данном случае), прописывать его не обязательно, т.к. он будет создан

* автоматически.

*/

public User() {

}

// Метод для получения значения переменной (public, виден извне)

public String getName() {

return name;

}

// Метод для задания значения переменной (public, виден извне)

public void setName(String name) {

this.name = name;

}

}

Использование класса

package ru.mami;

public final class Main {

public static void main(String[] args) {

// Создание класса с использованием конструктора

User mike = new User();

// Использование методов класса

mike.setName("Mike");

System.out.println(mike.getName()); // Mike

mike.setName("Bill");

System.out.println(mike.getName()); // Bill

}

}

Пример класса со статичными методами

package ru.mami; // Название пакета, к которому относится класс

public class User { // Объявление класса с именем User и видимостью public

private String name; // Поле (переменная) класса. Видна из всех методов.

/**

* Конструктор, используется для создания класса. Не имеет возвращаемого

* значения (всегда возвращает созданный объект класса). Название должно

* соответствовать названию класса. В остальном работает как обычный метод

* (может иметь входные параметры и т.п.)

*

* Если у класса только один конструктор и он ничего не делает (как в данном

* случае), прописывать его не обязательно, т.к. он будет создан

* автоматически.

*/

public User() {

}

// Метод для получения значения переменной (public, виден извне)

public String getName() {

return name;

}

// Метод для задания значения переменной (public, виден извне)

public void setName(String name) {

this.name = name;

}

/**

* Статичные методы не могут использовать поля, принадлежащие объектам

* класса (в данном случае main), и из-за этого могут быть вызваны без

* создания объекта.

*

* Данный метод проверяет, может ли строка являться именем.

*/

public static boolean isName(String text) {

// Имя должно содержать как минимум три буквы

if (text.length() < 3) {

return false;

}

// Имя должно начинаться с большой буквы

char firstChar = text.charAt(0);

if (!Character.isLetter(firstChar)

|| !Character.isUpperCase(firstChar)) {

return false;

}

// Все остальные буквы должны быть маленькими

for (int i = 1; i < text.length(); ++i) {

char currentChar = text.charAt(i);

if (!Character.isLetter(currentChar)

|| Character.isUpperCase(currentChar)) {

return false;

}

}

// Если выполнение метода дошло до этой точки, строка может быть именем

return true;

}

}

Пример использования класса со статичными методами

package ru.mami;

public final class Main {

public static void main(String[] args) {

// Методы вызваны через имя класса (без создания объекта)

System.out.println(User.isName("Mike")); // true

System.out.println(User.isName("dog")); // false

}

}

Пример использования класса с нестандартным конструктором

package ru.mami;

public class User {

// Слово final означает, что значение переменной может быть задано только

// один раз и только в конструкторе. После этого значение не может быть

// изменено.

private final String name;

/**

* Конструктор, принимающий параметр. Так как в классе присутствует

* конструктор, стандартный конструктор без параметров автоматически не

* создается

*/

public User(String name) {

this.name = name;

}

public String getName() {

return name;

}

}

Пример использования класса с нестандартным конструктором

package ru.mami;

public final class Main {

public static void main(String[] args) {

// User mike = new User(); // Ошибка: такого конструктора не существует

User mike = new User("Mike");

System.out.println(mike.getName()); // Mike

}

}

Пример класса с несколькими конструкторами

package ru.mami;

public class User {

private String name;

public User() {

}

public User(String name) {

this.name = name;

}

public void setName(String name) {

this.name = name;

}

public String getName() {

return name;

}

}

Пример использования класса с несколькими конструкторами

package ru.mami;

public final class Main {

public static void main(String[] args) {

User mike = new User();

mike.setName("Mike");

System.out.println(mike.getName());

User bill = new User("Bill");

System.out.println(bill.getName());

}

}

Упражнения

  • Создать класс User с полями для имени, фамилии и адреса (тип String). Добавить методы для получения и задания значений каждого из них.

  • Добавить конструктор, который задает все значения. Оставить возможность создать объект класса с использованием стандартного конструктора.

  • Добавить метод, возвращающий полное имя (имя + фамилия)

  • Убрать возможность создания объекта без указания имени и фамилии и сделать их неизменяемыми. Адрес оставить необязательным.

  • Создать класс Address с полями для города, улицы, номера дома и номера квартиры. Значение полей может изменяться.

  • Использовать класс Address в классе User для хранения информации об адресе.

Соседние файлы в папке java-lekcii-2016-01-17