Программирование на JAVA
Меню :
Стартовая
Основы программирования
Программирование на JAVA
Программирование на C++
Программирование на Pascal
Задачи по программированию
Не все объектно-ориентированные языки программирования содержат языковые конструкции для описания множественного наследования.
В языке Java множественное наследование имеет ограниченную поддержку через интерфейсы и будет рассмотрено в лекции 8.
Полиморфизм
Полиморфизм является одним из фундаментальных понятий в объектно-ориентированном программировании наряду с наследованием и инкапсуляцией. Слово "полиморфизм" греческого происхождения и означает "имеющий много форм". Чтобы понять, что оно означает применительно к объектно-ориентированному программированию, рассмотрим пример.
Предположим, мы хотим создать векторный графический редактор, в котором нам нужно описать в виде классов набор графических примитивов - Point, Line, Circle, Box и т.д. У каждого из этих классов определим метод draw для отображения соответствующего примитива на экране.
Очевидно, придется написать код, который при необходимости отобразить рисунок будет последовательно перебирать все примитивы, на момент отрисовки находящиеся на экране, и вызывать метод draw у каждого из них. Человек, незнакомый с полиморфизмом, вероятнее всего, создаст несколько массивов (отдельный массив для каждого типа примитивов) и напишет код, который последовательно переберет элементы из каждого массива и вызовет у каждого элемента метод draw. В результате получится примерно следующий код:
//создание пустого массива, который может содержать //объекты Pointe максимальным объемом 1000 Point[] р = new Point[1000];
Line[] I = new Line[ 1000]; Circlef] c= new Circle[1000]; Box[]b = new Box[1000];
//предположим, в этом месте происходит заполнение
// всех массивов соответствующими объектами
1ог(Ы \ = 0;\< р.\епдт;\++) { //цикл с перебором всех ячеек массива.
//вызов метода draw() в случае,
// если ячейка не пустая.
1т(р[1]!=пШ1) p.draw();
}
тогО'т I = 0; |" < 1.1епдтх1;1++) { 1т(1[1]!=пи11) 1.с1гауу();
}
1ог(\Ш \-0;\< с.1епд№;1++) { №(с[1]!=пи11) c.draw();
}
1ог(\п\. I = 0; 1 < Ь.1епдтп;!++) { |т(Ь[ф=пи11) b.draw();
}
Недостатком написанного выше кода является дублирование практически идентичного кода для отображения каждого типа примитивов. Также неудобно то, что при дальнейшей модернизации нашего графического редактора и добавлении возможности рисовать новые типы графических примитивов, например Text, Star и т