Рубрики

Вывод программы Java | Набор 2

Предсказать вывод следующих программ Java.

Вопрос 1

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
Derived
Derived

Прогнозировать первую строку вывода легко. Мы создаем объект типа 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 не происходит разделение объектов . Потому что не примитивные типы всегда назначаются по ссылке.

вопрос 2

package main;

  
// имя файла 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);

    }    

}

Выход:
Ошибка компилятора
В вышеприведенной программе нет проблем с правами доступа, поскольку Test и Main находятся в одном пакете, а защищенные члены класса могут быть доступны в других классах того же пакета. Проблема с кодом: в Point нет конструктора по умолчанию. Как и в C ++ , если мы напишем наш собственный параметризованный конструктор, то компилятор Java не создаст конструктор по умолчанию. Итак, в классе Point есть два изменения, которые могут исправить вышеприведенную программу.
1) Удалить параметризованный конструктор.
2) Добавить конструктор без каких-либо параметров.
Java не поддерживает аргументы по умолчанию, так что это не вариант.

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

Рекомендуемые посты:

Вывод программы Java | Набор 2

0.00 (0%) 0 votes