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

53. Ограничения на типы левой и правой частей оператора присваивания

Для корректного выполнения выражения, результат и переменная, записанная в правой части должны иметь одинаковые или совместимые типы

При несовпадении типов правой и левой части, для совместимых типов происходит неявное преобразование результата выражения к типу переменной, указанной в правой части. 

Оператор присваивания заменяет текущее значение переменной новым значением, задаваемым выражением. Переменная в левой части оператора присваивания и выражение в его правой части должны быть одного и того же типа, однако он не должен быть лимитируемым.

оператор-присваивания ::= имя-переменной := выражение;

54. Понятия «динамическое связывание» и «статическое связывание»

Методы классов помечаются модификатором static не случайно – для них при компиляции программного кода действуетстатическое связывание. Это значит, что в контексте какого класса указано имя метода в исходном коде, на метод того класса в скомпилированном коде и ставится ссылка. Методы объектов в Java являются динамическими, то есть для них действует динамическое связывание. Оно происходит на этапе выполнения программы непосредственно во время вызова метода, причем на этапе написания данного метода заранее неизвестно, из какого класса будет проведен вызов. Это определяется типом объекта, для которого работает данный код - какому классу принадлежит объект, из того класса вызывается метод. Такое связывание происходит гораздо позже того, как был скомпилирован код метода. Поэтому такой тип связывания часто называют поздним связыванием.

55. Абстрактные методы и абстрактные классы.

Абстрактным называется класс, на основе которого не могут создаваться объекты. При этом наследники класса могут быть не абстрактными, на их основе объекты создавать, соответсвенно, можно.

Для того, чтобы превратить класс в абстрактный перед его именем надо указать модификатор abstract.

Рассмотрим пример абстрактного класса A:

abstract class A {     int p1;     A() {         p1 = 1;     }     void print() {         System.out.println(p1);     } } class B extends A { } public class Main {     public static void main(String[] args) {         A ob1;         // ошибка: ob1 = new A();         B ob2 = new B(); // будет вызван конструктов по умолчанию из A         ob2.print();     } }

Java разрешит описать конструкторы в классе A, но не разрешит ими воспользоваться (потому что запрещено создавать объекты абстрактного класса).

Обратите внимание на то, что объявление переменной ob1 как ссылки, на объект класса A тоже не запрещается.

    1. Понятие интерфейса. Назначение интерфейса.

Язык Java поддерживает концепцию интерфейса, который представляет собой просто именованный набор общедоступных поведений и/или элементов постоянных данных, для которых класс, реализующий этот интерфейс, должен предоставить код. Он не указывает детали поведения. В сущности (и для Java-компилятора), интерфейс определяет новый тип данных и является одним из наиболее мощных средств языка.

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

Любой класс в любой иерархии может реализовать конкретный интерфейс. Это значит, что другие, несвязанные классы могут реализовать этот же самый интерфейс.

Определение интерфейсов

Интерфейс определяется просто:

public interface interfaceName {

final constantType

constantName = constantValue;

...

returnValueType

methodName( arguments );

...

}