Вывод программы на Java | Комплект 2

Опубликовано: 15 Февраля, 2022

Спрогнозируйте результат работы следующих программ 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 внесены следующие два изменения, которые могут исправить указанную выше программу.

  1. Удалите параметризованный конструктор.
  2. Добавьте конструктор без каких-либо параметров.

Java не поддерживает аргументы по умолчанию, так что это не вариант.
Пожалуйста, напишите комментарии, если вы найдете какие-либо ответы / объяснения неверными или хотите поделиться дополнительной информацией по темам, обсужденным выше.

Вниманию читателя! Не переставай учиться сейчас. Ознакомьтесь со всеми важными концепциями Java Foundation и коллекций с помощью курса "Основы Java и Java Collections" по доступной для студентов цене и будьте готовы к работе в отрасли. Чтобы завершить подготовку от изучения языка к DS Algo и многому другому, см. Полный курс подготовки к собеседованию .