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

Пацей 4 сем / Лекции / СТПI_2_ООП

.pdf
Скачиваний:
70
Добавлен:
29.04.2018
Размер:
15.18 Mб
Скачать
int ordinal() String name()
int compareTo(T obj)
равно.

Перечисления

1)java.lang.Enum - класс (new не требует)

2)при инициализации хотя бы одного - инициализация всех

3)может содержать поля, конструкторы и методы, реализовывать интерфейсы

4)

static enumType[] values()

— возвращает массив, содержащий все

элементы перечисления в порядке их объявления;

 

static <T extends Enum<T>> T valueOf(Class<T> enumType, String arg)

 

создает элемент перечисления, соответствующий заданному типу и

 

значению передаваемой строки;

 

 

 

static enumType valueOf(String arg)

создает элемент перечисления,

соответствующий значению передаваемой строки; возвращает позицию элемента перечисления; возвращает имя элемента; сравнивает элементы на больше-меньше либо

Методы перечисления

public enum AirType{

экземпляры перечисления могут к

Boeing707, TY144, A320;

этим методам обращаться

 

public int countOfPlace() {

 

 

// проверка параметров

 

 

switch (this) {

 

 

 

 

case Boeing707:

 

 

 

 

return 456;

 

 

 

 

case TY144:

 

 

 

 

return 144;

 

 

 

 

case A320:

 

 

 

 

return 320;

 

 

 

 

default:

 

 

 

 

throw new EnumConstantNotPresentException

 

 

 

(this.getDeclaringClass(), this.name());

 

 

}

Без throw данный код не будет

 

}

 

 

 

 

 

}

 

 

компилироваться

AirType anna = AirType.A320; AirType vano = AirType.A320; anna.equals(vano); //true anna.getClass();

//class by.belstu.fit.base.AirType anna.compareTo(vano); anna.name();//A320

public enum AirType {

используются для сохранения

дополнительной информации

 

 

 

Boeing707 (430), TY144(144), A320(480); private int freePlaces; // поле вместительность

AirType() { // конструктор класса перечисления

}

AirType(int place) { // конструктор класса перечисления

freePlaces = place;

конструкторы вызываются

}

автоматически при

public int getFreePlaces() {

инициализации любого из

return freePlaces;

элементов

}

 

public void setFreePlaces(int place) {

freePlaces = place;

 

}

 

@Override

не может быть public и protected

public String toString() {

 

return String.format("%s : free places = %d", name(),

freePlaces);

 

}

 

}

Перечисление не может быть суперклассом

 

AirType anna = AirType.valueOf (AirType.class,"a320".toUpperCase());

System.out.println

(anna + " : ordinal -> " + anna.ordinal()); anna.setFreePlaces(20);

AirType[ ] station = AirType.values(); for (AirType element : station) {

System.out.println(element);

}

A320 : free places = 480 : ordinal -> 2

Boeing707 : free places = 430

TY144 : free places = 144

A320 : free places = 20

Перечисления ограничения:

конструкторы вызываются автоматически при инициализации - > не может public и protected

не может быть суперклассом не может быть подклассами не может быть абстрактными

не может создавать экземпляры, используя ключевое слово new

Наследование

Суперкласс – подкласс

Автоматически наследует свойства суперкласса всех классов — класса Object

Множественное наследование классов запрещено (extends)

Множественное наследование интерфейсов –

можно (implements)

Понятие полиморфизма аналогично C#

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

public class Card {

public void doPay(double amountPayment) { System.out.println("complete payment");

}

}

class CreditCard extends Card {

@Override // аннотация

public void doPay(double amountPayment) {

// переопределенный метод

// реализация

System.out.println("complete paymant from credit");

}

}

//...

Card a12323 = new Card(); a12323.doPay(34);

a12323 = new CreditCard(); a12323.doPay(234);

Классы и методы final

class Card {

// метод не может быть полиморфным final void getMoney() {}

}

class DebetCard extends Card {

// следующий метод невозможен

@Override

void getMony() {} // ошибка компиляции

}

// классне может быть суперклассом public final class Card { /* код */ }

// следующий класс невозможен

class MegaCard extends Card{ /* код */ }

// ошибка компиляции

Классы оболочки

public final class Card {

private int sum ;

public int getSum(){return sum;}

public void doPay(double amountPayment) { System.out.println("complete payment");

}

 

}

 

class WrapperCard {

Если необходимо создать собственную

private Card fcard;

реализацию final-класса, то создается

public WrapperCard() {

класс-оболочка

fcard = new Card();

 

}

publicdouble nalog(int amount) {

return this.fcard.getSum()*0.13; }

}

Соседние файлы в папке Лекции