Пацей 4 сем / Лекции / СТПI_2_ООП
.pdfПеречисления
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; }
}