Пацей 4 сем / Лекции / СТПI_2_ООП
.pdf►методы автоматически - 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;
}
}