- •050101- Комп'ютерні науки
- •050102- Комп'ютерна інженерія
- •Структура класса
- •Синтаксис работы с атрибутами и методами классов.
- •Константы. Статические переменные и методы.
- •Пакеты в Java.
- •Модификаторы доступа
- •Инициализация переменных , типы переменных.
- •Интерфейсы.
- •Наследование.
- •Связь классов и интерфейсов.
- •Обработка иключений.
- •Многопоточность.
- •2009Приложение 1
Связь классов и интерфейсов.
Механизм интерфейсов помагает обходить ограничение Java , запрещающее множественное наследование в классах. Интерфейсы – это альтернатива , лишенная недостатков множественного наследования. Т.о связь интерфейсов с классами осуществляется через ключевое слово implements – класс реализует тот или иной интерфейс. Нет ограничений на количество интерфейсов , которые может реализовывать класс(они все указываются через запятую). Что значит , что класс реализует интерфейс? Это значит , что в классе должны быть реализованы все методы данного интерфейса. Обратимся к нашей модели – у нас есть класс Студент , который является наследником класса Человек и реализует интерфейс Учебный. Код интерфейса –
Листинг 7.
7.1 public interface Navchalny {
7.2 String var_interf_navchal="Це змінна інтерфейсу Navchalny";
7.3 public boolean navchatys(String oblast_dialnosty,int time);
7.4 public float get_riven_maysternosty(String oblast_dialnosty);
7.5 }
В этом интерфейсе присутствуют 2 метода – метод =учиться= (строка 7.2) и метод =показать уровень мастерства по учебной дисциплине=(строка 7.4). Любой класс , который реализует данный интерфейс обязательно должен содержать все методы данного интерфейса. Пример на классе Студент :
Листинг 8.
package javaapplication38;
import java.util.Date;
/**
*
@author Nezdoliy
*/
public class Student extends Human implements Navchalny {
Date date_vstup;
String specializacia;
String universit;
String gruppa;
int sred_ball;
public Student(String fio, Date date_vstup, String specializacia, String universit,
String gruppa, int sred_ball) {
super(fio);
this.date_vstup = date_vstup;
this.specializacia = specializacia;
this.universit = universit;
this.gruppa = gruppa;
this.sred_ball = sred_ball;
System.out.println("Це працює конструктор 1 класу Student ");
}
public void zdaty_sesiu(){
System.out.println("Це працює метод zdaty_sesiu у класі Student ");
}
public void otrymat_stipend(){
System.out.println(this.toString());
this.zdaty_sesiu();
System.out.println("Це працює метод otrymat_stipend у класі Student ");
}
public static void main(String[] args) {
Student std1=new Student("Petrov ", new Date(),"Компьютерна інженерія","ЧДУ","121",85);
std1.otrymat_stipend();
}
public boolean navchatys(String oblast_dialnosty, int time) {
System.out.println("Це працює метод navchatys у класі Student ");
return false;
}
public float get_riven_maysternosty(String oblast_dialnosty) {
System.out.println("Це працює метод get_riven_maysternosty у класі Student ");
return 0;
}
}
Строка 34 и строка 38 Листинга 8 – это реализация в этом классе методов интерфейса Navchalny, который он реализует(строка 6). В случае , когда интерфейсы связаны наследованием и класс реализует младший интерфейс , то в классе должны быть реализованы все методы старших интерфейсов + все методы младшего интерфейса. Пример- интерфейсы Спортивный и Плавательный связаны наследованием. В Спортивном присутствуют методы = бегать на зарядку= и =учавствовать в соревнованиях= , в Плавательном присутствует метод =плавать= . Класс Студент-спортсмен наследуется от класса Студент и реализует интерфейс Плавательный. Это означает , что этот класс имеет все открытые свойства и поведение классов предков(Человек и Студент) и кроме того в поведение класса добавились все методы вышеуказанных интерфейсов. Это контролирует среда разработки и в случае необходимости подскажет нам , какие методы мы забыли реализовать в классе. Пример кода :
Листинг 9.
package javaapplication38;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.logging.Level;
import java.util.logging.Logger;
/**
*
@author Nezdoliy
*/
public class Student_sportsmen extends Student implements Plavalnyi{
String fio_trener;
public Student_sportsmen(String fio, Date date_vstup, String specializacia, String universit, String gruppa,
int sred_ball, String fio_trener) {
super(fio, date_vstup, specializacia, universit, gruppa, sred_ball);
this.fio_trener = fio_trener;
System.out.println("Це працює конструктор 1 класу Student_sportsmen ");
}
public static void main(String[] args) {
try {
SimpleDateFormat dateFormat = new SimpleDateFormat("dd.MM.yyyy");
Date dat1 = dateFormat.parse("23.01.1991");
Student_sportsmen std1 = new Student_sportsmen("Sidorov S.V.", dat1, "ekolog", "ЧДУ", "356", 76, "Зубрицький О.П.");
std1.pryimaty_ychast_sorevnov("Kiev", new Date(),"Triatlon");
} catch (ParseException ex) {
System.out.println("Це обробка помилок ");
}
}
public boolean navchatys(String oblast_dialnosty, int time) {
System.out.println("Це працює метод navchatys у класі Student_sportsmen ");
return false;
}
public float get_riven_maysternosty(String oblast_dialnosty) {
System.out.println("Це працює метод get_riven_maysternosty у класі Student_sportsmen ");
return 0.0f;
}
public void bigaty_na_zarydky() {
System.out.println("Це працює метод bigaty_na_zarydky у класі Student_sportsmen ");
}
public boolean pryimaty_ychast_sorevnov(String misce, Date start, String vid_sporty) {
this.plavaty(400);
System.out.println("Студент "+this.fio +" , якого тренує "+this.fio_trener+
" приймає участь у змаганнях з "+vid_sporty);
return false;
}
public void plavaty(int distancia) {
System.out.println("Це заплив студента "+this.fio+" на "+ distancia+" метрів ");
}
}
