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

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

Спрогнозируйте вывод следующих Java-программ:

Question 1

// file name: Main.java
  
class Base {
    protected void foo() {}
class Derived extends Base {
    void foo() {}
public class Main {
    public static void main(String args[]) {
        Derived d = new Derived();
        d.foo();
    }
}

Вывод: ошибка компилятора
foo () защищен в Base и по умолчанию в Derived. Доступ по умолчанию более ограниченный. Когда производный класс переопределяет функцию базового класса, более ограниченный доступ не может быть предоставлен переопределенной функции. Если мы сделаем foo () общедоступным, программа будет работать нормально без ошибок. Поведение в C ++ другое. C ++ позволяет предоставлять более ограниченный доступ к методам производного класса.



Question 2

// file name: Main.java
  
class Complex {
    private double re, im;    
    public String toString() {
        return "(" + re + " + " + im + "i)";
    }
    Complex(Complex c) {
        re = c.re;
        im = c.im;
    }
}
  
public class Main {
    public static void main(String[] args) {
        Complex c1 = new Complex();
        Complex c2 = new Complex(c1);
        System.out.println(c2);
    }
}

Вывод: ошибка компилятора в строке «Complex c1 = new Complex ();»
В Java, если мы напишем собственный конструктор копирования или параметризованный конструктор, компилятор не создаст конструктор по умолчанию. Это поведение аналогично C ++.

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

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