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

Отличие перегрузки функций от переопределения.

Перегруженная функция – это копия сигнатуры функции по названию, но с другим набором входных параметров. Обычно она располагается в том же классе (как наши конструкторы), но иногда такую функцию можно поместить в наследующий класс.

 Переопределенная функция – это полная копия сигнатуры функции вместе с параметрами, которую переопределяем, но с другой внутренней логикой работы. Располагается такая функция только в наследующем классе.

Тоесть, если мы хотим вызвать из класса-наследника метод, который объявлен в родительском классе, но не хотим, чтобы этот метод был вызван из родительского класса, мы создаем в классе – наследнике такую же точно функцию и снабжаем её специальной аннотацией @override. Без этой аннотации на переопределенную функцию компилятор будет ругаться. Пример:

 @override

public void my_funk() { другой алгоритм работы }  // в родительском есть такая же функц-я

Отличие классов от интерфейсов.

Для формирования четкого понимания настоятельно советую прочесть исчерпывающую статью на Хабре:

 https://habrahabr.ru/post/30444/ 

В дополнение скажу, что интерфейсы довольно удобная штука в том смысле, что класс в java можно унаследовать только от одного класса и не больше. А вот реализовывать класс может сколько угодно интерфейсов. Они перечисляются в заголовке дочернего класса через запятую. В этом случае вместо ключевого слова extends в заголовке класса употребляется ключевое слово implements

Лекция 6. Массивы и строки. Массивы и строки.

Типы массивов. Объявление массива, инициализация и обращение к элементам массива. Ссылки. Приведение типов. Строки.

 Массив – это набор данных одного и того же типа, снабженный целочисленным индексом.

Объявление массива производится следующим образом:

 int[] a = new int[100];  или   int[] a;

 Где вначале идет объявление типа элементов массива, затем квадратные скобки, затем переменная массива. Как вариант можно написать:

 int  a[]; 

 Это тоже правомерно, но вариант со скобками возле названия типа, более распространен и считается хорошим стилем написания кода.

 После объявления переменной массива с помощью оператора new производится инициализация массива значениями соответствующего типа. Так массив типа int окажется заполнен нулями, типа boolean – значениями false и т.д.

 Массив можно заполнять произвольными значениями уже во время инициализации. Для этого можно добавить к объявлению массива список его значений в фигурных скобках.

 int[]  a  =  {1,2,3,4,5};

 Оператор new при этом не нужен, хотя можно записать и таким образом:

 int[] a;

a  =  new int[] {1,2,3,4,5};

 Но это как мне кажется, наиболее громоздкая запись.

 Индексы массивов в java всегда начинаются с нуля. Это означает, что если в массиве d 100 элементов, то обращение к  элементу d[100] вызовет ошибку выхода за пределы массива.

Массивы и списки в java относятся к ссылочным типам. Это означает, что при присвоении одной переменной массива другой, обе переменный начинают указывать на один и тот же участок памяти с содержимым массива. То есть.

 int[] a  =  new int[100];

int[] b =  new int[100];

a = b;   // теперь обе переменные указывают на один и тот же массив b.

 a[50] = 11;   // теперь b[50]  тоже равно 11!

 Для того, чтобы быстро распечатать содержимое массива, в классе java.util.Arrays предусмотрен соответствующий метод  Arrays.toString(какой_то_массив);

 Для копирования массива в отдельную переменную в классе Arrays предусмотрен специальный метод Arrays.copyOf(массив, длина). Пример:

 import java.util.Arrays;

…

 int[] a  =  new int[30];

int[] b  =  new int[15];

 b[5]  =  7;

a  =  Arrays.copyOf(b, b.length);

 b[5]  =  18;

 System.out.println("a="+ Arrays.toString(a));

       System.out.println("b="+ Arrays.toString(b)); 

Программа распечатает:

 a=[0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0]

b=[0, 0, 0, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0]

 После применения метода Arrays.copyOf(b, b.length),  переменная а указывает на копию массива b, но это уже совсем другой массив. Поэтому изменение массива b никак на а не сказалось.