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

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

.pdf
Скачиваний:
70
Добавлен:
29.04.2018
Размер:
15.18 Mб
Скачать

методы автоматически - public и abstract

–реализации нет

поля автоматически— public, static и final

– только проинициализированные

- методы default

- static методы

- pivate [+static ] методы

public interface ICardAction {

boolean openAccount(); boolean closeAccount();

private void blocking(){};

void unBlocking();

}

При отсутствии реализации

@Override

public boolean openAccount() { return false;

}

Реализаци м.с. корректной

@Override

public boolean closeAccount() { throw new

UnsupportedOperationException();

}

Соглашения:

I ….able - > C…..Impl

Параметризация интерфейсов

@Override

 

public double TransferFromCard(DebetCard someCard) {

снижает гибкость

 

double sum = 0;

программы и

увеличивает

if (someCard instanceof DebetCard) {

количество кода,

 

DebetCard anyC = (DebetCard) someCard; sum = 1500;

}else {

throw new IllegalArgumentException("Incompatible card"

+ someCard.getClass()); }

returnsum;

}

Исключается возможность ошибки

public interface IBankActionParam <T extends DebetCard> {

double TransferFromCard(DebetCard Card); Параметром

}

м.б. подкласс

public class UnlimCard implements IBankActionParam<DebetCard> { @Override

public double TransferFromCard(DebetCard someCard) { return someCard.getSum()*234.45;

}

}

Реализация методов интерфейса

по default Java 8

public interface Calculator { int add(int a, int b);

default int multiply(int a, int b) { return a * b;

}

}

public class MainActivity extends AppCompatActivity implements Calculator {

@Override

protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main);

Log.i("TEST", "result : " + multiply(3, 4)); Log.i("TEST", "result : " + add(3, 4));

}

@Override

public int add(int a, int b) {

return a + b;

}

}

Статические методы

интерфейса

Java 8

Нельзя переопределять в классах при реализации – статик метода

public interface Calculator {

int add(int a, int b);

static int minus(int a, int b) {

return a - b; }

default int multiply(int a, int b) { return a * b;

}

}

Private методы интерфейса

Должны быть реализованы

Java 9

 

public interface Logging{

private void log(String message){

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

}

}

Уменьшают количество дублирования кода

Аннотации

Метатеги, которые добавляются к коду и применяются к объявлению пакетов, классов, конструкторов, методов, полей, параметров и локальных переменных.

Используются для хранения метаданных программного кода

Java SE

@Retention, @Documented, @Target и @Inherited —java.lang.annotation. (модиф. др.а)

@Override, @Deprecated и @SuppressWarnings

из пакета java.lang (мод. пов. ком. и JVM)

@Repeatable @FunctionalInterface

Назначения:

отслеживания ошибок

устранения предупреждений

генерации кода, XML файлов, и т.п.

Определение типа аннотации (annotation type):

@interface ClassAdditionInfo { String author();

String date();

int currentRevision() default 1;

String lastModified() default "N/A";

}

Создание пользовательских аннотаций

@ClassAdditionInfo( author = "Lena", date = "23/2/2017", currentRevision = 2)

public class UnlimCard implements IBankActionParam<DebetCard> {

@Override

public double TransferFromCard(DebetCard someCard) { return someCard.getSum()*234.45;

}

}

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