Вывод программы на Java | Комплект 2
Спрогнозируйте результат работы следующих программ Java.
Question 1:
Java
package main; class Base { public void Print() { System.out.println( "Base" ); } } class Derived extends Base { public void Print() { System.out.println( "Derived" ); } } class Main { public static void DoPrint(Base o) { o.Print(); } public static void main(String[] args) { Base x = new Base(); Base y = new Derived(); Derived z = new Derived(); DoPrint(x); DoPrint(y); DoPrint(z); } } |
Выход:
База Полученный Полученный
Предсказать первую строку вывода легко. Создаем объект типа Base и вызываем DoPrint (). DoPrint вызывает функцию печати, и мы получаем первую строку.
DoPrint (y) вызывает вторую строку вывода. Как и в C ++, в Java разрешено присвоение ссылки производного класса ссылке базового класса. Следовательно, выражение Base y = new Derived () является допустимым оператором в Java. В DoPrint () o начинает ссылаться на тот же объект, на который указывает y. Кроме того, в отличие от C ++, в Java функции по умолчанию являются виртуальными. Итак, когда мы вызываем o.print (), метод print () класса Derived вызывается из-за полиморфизма времени выполнения, присутствующего по умолчанию в Java.
DoPrint (z) вызывает третью строку вывода, мы передаем ссылку типа Derived, и снова вызывается метод print () класса Derived. Здесь следует отметить следующее: в отличие от C ++, нарезка объектов в Java не выполняется. Потому что непримитивные типы всегда назначаются по ссылке.
Question 2:
Java
package main; // filename Main.java class Point { protected int x, y; public Point( int _x, int _y) { x = _x; y = _y; } } public class Main { public static void main(String args[]) { Point p = new Point(); System.out.println( "x = " + p.x + ", y = " + p.y); } } |
Выход:
Ошибка компилятора
В приведенной выше программе нет проблем с правами доступа, потому что Point и Main находятся в одном пакете, а к защищенным членам класса можно получить доступ в других классах того же пакета. Проблема с кодом: в Point нет конструктора по умолчанию.
Как и в C ++, если мы напишем собственный параметризованный конструктор, компилятор Java не создаст конструктор по умолчанию. Итак, в класс Point внесены следующие два изменения, которые могут исправить указанную выше программу.
- Удалите параметризованный конструктор.
- Добавьте конструктор без каких-либо параметров.
Java не поддерживает аргументы по умолчанию, так что это не вариант.
Пожалуйста, напишите комментарии, если вы найдете какие-либо ответы / объяснения неверными или хотите поделиться дополнительной информацией по темам, обсужденным выше.
Вниманию читателя! Не переставай учиться сейчас. Ознакомьтесь со всеми важными концепциями Java Foundation и коллекций с помощью курса "Основы Java и Java Collections" по доступной для студентов цене и будьте готовы к работе в отрасли. Чтобы завершить подготовку от изучения языка к DS Algo и многому другому, см. Полный курс подготовки к собеседованию .