Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
metod_OOP2012.doc
Скачиваний:
1
Добавлен:
01.03.2025
Размер:
584 Кб
Скачать
☆

Связь классов и интерфейсов.

Механизм интерфейсов помагает обходить ограничение 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.

  1. package javaapplication38;

  1. import java.util.Date;

  1. /**

  2. *

    1. @author Nezdoliy

  3. */

  4. public class Student extends Human implements Navchalny {

  5. Date date_vstup;

  6. String specializacia;

  7. String universit;

  8. String gruppa;

  9. int sred_ball;

  1. public Student(String fio, Date date_vstup, String specializacia, String universit,

  2. String gruppa, int sred_ball) {

  3. super(fio);

  4. this.date_vstup = date_vstup;

  5. this.specializacia = specializacia;

  6. this.universit = universit;

  7. this.gruppa = gruppa;

  8. this.sred_ball = sred_ball;

  9. System.out.println("Це працює конструктор 1 класу Student ");

  10. }

  1. public void zdaty_sesiu(){

  2. System.out.println("Це працює метод zdaty_sesiu у класі Student ");

  3. }

  4. public void otrymat_stipend(){

  5. System.out.println(this.toString());

  6. this.zdaty_sesiu();

  7. System.out.println("Це працює метод otrymat_stipend у класі Student ");

  8. }

  9. public static void main(String[] args) {

  10. Student std1=new Student("Petrov ", new Date(),"Компьютерна інженерія","ЧДУ","121",85);

  11. std1.otrymat_stipend();

  12. }

  1. public boolean navchatys(String oblast_dialnosty, int time) {

  2. System.out.println("Це працює метод navchatys у класі Student ");

  3. return false;

  4. }

  1. public float get_riven_maysternosty(String oblast_dialnosty) {

  2. System.out.println("Це працює метод get_riven_maysternosty у класі Student ");

  3. return 0;

  4. }

  1. }

Строка 34 и строка 38 Листинга 8 – это реализация в этом классе методов интерфейса Navchalny, который он реализует(строка 6). В случае , когда интерфейсы связаны наследованием и класс реализует младший интерфейс , то в классе должны быть реализованы все методы старших интерфейсов + все методы младшего интерфейса. Пример- интерфейсы Спортивный и Плавательный связаны наследованием. В Спортивном присутствуют методы = бегать на зарядку= и =учавствовать в соревнованиях= , в Плавательном присутствует метод =плавать= . Класс Студент-спортсмен наследуется от класса Студент и реализует интерфейс Плавательный. Это означает , что этот класс имеет все открытые свойства и поведение классов предков(Человек и Студент) и кроме того в поведение класса добавились все методы вышеуказанных интерфейсов. Это контролирует среда разработки и в случае необходимости подскажет нам , какие методы мы забыли реализовать в классе. Пример кода :

Листинг 9.

  1. package javaapplication38;

  1. import java.text.ParseException;

  2. import java.text.SimpleDateFormat;

  3. import java.util.Date;

  4. import java.util.logging.Level;

  5. import java.util.logging.Logger;

  6. /**

  7. *

    • @author Nezdoliy

  8. */

  9. public class Student_sportsmen extends Student implements Plavalnyi{

  10. String fio_trener;

  1. public Student_sportsmen(String fio, Date date_vstup, String specializacia, String universit, String gruppa,

  2. int sred_ball, String fio_trener) {

  3. super(fio, date_vstup, specializacia, universit, gruppa, sred_ball);

  4. this.fio_trener = fio_trener;

  5. System.out.println("Це працює конструктор 1 класу Student_sportsmen ");

  6. }

  1. public static void main(String[] args) {

  2. try {

  3. SimpleDateFormat dateFormat = new SimpleDateFormat("dd.MM.yyyy");

  4. Date dat1 = dateFormat.parse("23.01.1991");

  5. Student_sportsmen std1 = new Student_sportsmen("Sidorov S.V.", dat1, "ekolog", "ЧДУ", "356", 76, "Зубрицький О.П.");

  6. std1.pryimaty_ychast_sorevnov("Kiev", new Date(),"Triatlon");

  7. } catch (ParseException ex) {

  8. System.out.println("Це обробка помилок ");

  9. }

  10. }

  1. public boolean navchatys(String oblast_dialnosty, int time) {

  1. System.out.println("Це працює метод navchatys у класі Student_sportsmen ");

  2. return false;

  3. }

  1. public float get_riven_maysternosty(String oblast_dialnosty) {

  2. System.out.println("Це працює метод get_riven_maysternosty у класі Student_sportsmen ");

  3. return 0.0f;

  4. }

  1. public void bigaty_na_zarydky() {

  2. System.out.println("Це працює метод bigaty_na_zarydky у класі Student_sportsmen ");

  3. }

  1. public boolean pryimaty_ychast_sorevnov(String misce, Date start, String vid_sporty) {

  2. this.plavaty(400);

  3. System.out.println("Студент "+this.fio +" , якого тренує "+this.fio_trener+

" приймає участь у змаганнях з "+vid_sporty);

  1. return false;

  2. }

public void plavaty(int distancia) {

System.out.println("Це заплив студента "+this.fio+" на "+ distancia+" метрів ");

}

}

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]