Sem II (Program I) - N5 Flashcards

1
Q

Какую роль играет super.метод() в иерархии наследования?

A

super.метод() позволяет вызвать переопределенный метод суперкласса внутри подкласса для использования или расширения его функциональности.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
2
Q

Как следует реализовывать конструкторы и сеттеры для защиты иерархии наследования?

A

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

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
3
Q

Когда и как следует реализовывать собственные классы исключений?

A

Собственные классы исключений создаются при необходимости и должны наследоваться от Exception (checked) или RuntimeException (unchecked).

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
4
Q

Почему важно реализовать конструктор без параметров в классе?

A

Конструктор без параметров позволяет легко инициализировать объекты без передачи аргументов и может быть полезен при наследовании.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
5
Q

What is isEmpty() in Java?

A

method is used to check if a data structure, like a String, List, or other collection, contains any elements or is empty. It returns true if the object is empty and false otherwise.

String str = "";
if (str.isEmpty()) {
    System.out.println("The string is empty.");
} else {
    System.out.println("The string is not empty.");
}
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
6
Q

How to check if a data structure (string, list…) contains any elements or is empty?

A

isEmpty()

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
7
Q

How to test whether an object is an instance of a specific class or implements a specific interface?

A

instanceof

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
8
Q

How to get detailed message about the exception?

A

String getMessage()

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
9
Q

What does String getMessage() do?

A

It is used to get detailed message about the exception.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
10
Q

Wann sollte man Vererbung nicht verwenden?

A

Наследование не следует использовать, когда отношения между классами не являются иерархическими или специфическими. Если основной целью является повторное использование кода, другие подходы, такие как композиция, могут быть более подходящими.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
11
Q

Kann jede Methode der Superklasse in der Subklasse überschrieben werden?

A

Нет, методы, помеченные как final или private, не могут быть переопределены.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
12
Q

Что происходит, когда метод базового класса переопределяется в подклассе?

A

Метод подкласса используется при обычных вызовах, если только явно не вызывается метод базового класса с помощью super.methodeName()

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
13
Q

Kann man in der Subklasse auf Instanzvariablen der Basisklasse zugreifen?

A

Да, с помощью super.variableName, но только если переменные не являются private.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
14
Q

Was ist Subtyping?
Что такое подтипизация?

A

Подтипизация обозначает отношение, при котором объект подкласса может использоваться везде, где ожидается объект базового класса.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
15
Q

Wie funktioniert die implizite Typkonvertierung in einer Vererbungshierarchie?

A

Объект подкласса может автоматически преобразовываться в ссылку суперкласса:
~~~
Sohn refSohn = new Sohn();
Vater refVater = refSohn; // implizite Typkonvertierung
~~~

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
16
Q

Welche Vorteile bietet Polymorphie?

A

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

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
17
Q

Как можно обращаться к переопределенным методам у полиморфных объектов?

A

Это можно сделать, вызывая конкретный метод подкласса или используя super.methodName(), чтобы вызвать метод базового класса.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
18
Q

Насколько глубокими должны быть иерархии наследования в идеале?

A

Они должны быть широкими, но не слишком глубокими, чтобы уменьшить сложность. Типичные иерархии имеют 1-2 уровня (за исключениями).

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
19
Q

Какие элементы можно обращаться к с помощью super в подклассе?

A

С помощью super можно обращаться к конструктору суперкласса (super()), переопределенным методам суперкласса (super.methodName()), и экземплярным переменным суперкласса (кроме private).

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
20
Q

Чем абстрактные классы отличаются от интерфейсов?

A

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

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
21
Q

Was ist Polymorphie in der objektorientierten Programmierung?

A

Полиморфизм означает, что объекты различных классов могут быть обработаны через общий интерфейс.

22
Q

Как работает позднее связывание в Java?

A

Конкретный метод, который будет вызван при вызове метода, определяется во время выполнения

Figur[] figuren = new Figur[3];
figuren[0] = new Kreis(new Punkt(1,2),5);
figuren[1] = new Rechteck(new Punkt(3,3),2,4);
figuren[2] = new Quadrat(new Punkt(3,-4),7);
for (Figur f : figuren) {
    System.out.println(f.berechneFlaeche());
}
23
Q

Was ist ein Up-Cast in Java?

A

Beim Up-Casting wird ein Objekt einer Unterklasse als Referenz der Oberklasse behandelt:

Sohn refSohn = new Sohn();
Vater refVater = refSohn; // Up-Cast

Dabei ist die Sichtweise eingeschränkt, da nur die Methoden der Oberklasse sichtbar sind.

24
Q

Что происходит, если метод не определен в базовом классе, но используется в подклассах?

A

Возникнет ошибка компиляции, если метод не существует в базовом классе.

25
Q

Wie wird ein Array mit polymorphen Objekten genutzt?

A

Ein Array vom Typ der Basisklasse kann Objekte jeder ihrer Unterklassen aufnehmen:

Figur[] figuren = new Figur[3];
figuren[0] = new Kreis(new Punkt(1,2),5);
figuren[1] = new Rechteck(new Punkt(3,3),2,4);
figuren[2] = new Quadrat(new Punkt(3,-4),7);
26
Q

Как можно применить метод ко всем объектам в массиве?

A
public static void gibFlaecheAus(Figur[] figuren) {
    for (Figur f : figuren) {
        System.out.println(f.berechneFlaeche());
    }
}
27
Q

Можно ли преобразовать ссылку дочернего класса в ссылку родительского класса?

A

Да, это называется повышающим приведением типов (Up-Cast) и происходит неявно, так как каждый дочерний класс наследует все свойства родительского класса.

28
Q

В чём разница между повышающим и понижающим приведением типов?

A

Повышающее приведение (Up-Casting): преобразование типа вверх по иерархии наследования, неявное и всегда возможное.

Понижающее приведение (Down-Casting): преобразование типа вниз, явное и может вызвать исключение ClassCastException, если объект несовместим.

29
Q

Когда допустимо понижающее приведение типов?

A

Только когда ссылка действительно указывает на объект целевого класса или его подкласса.

30
Q

Was passiert, wenn ein Down-Cast nicht korrekt ist?

A

Eine ClassCastException wird zur Laufzeit ausgelöst.

31
Q

Какова цель оператора instanceof?

A

Он проверяет, указывает ли ссылка на объект определённого типа или его подкласса.

32
Q

**Was liefert null instanceof <Classe> zurück?**</Classe>

A

Immer false.

33
Q

Когда полезен оператор instanceof?

A

Когда тип объекта по ссылке неизвестен и должен быть проверен перед понижающим приведением типов.

34
Q

Как получить доступ к специфическим методам подкласса?

A

Durch Casting, z. B. ((Kreis) figuren[0]).getRadius();, wobei überprüft wird, dass die Referenz ein Kreis-Objekt ist.

35
Q

Что делает следующий код?

if (f instanceof Rechteck) {
    Rechteck ref = (Rechteck) f;
    ref.berechneUmfang();
}
A

Der Code prüft, ob f ein Rechteck ist. Wenn ja, wird es gecastet, um auf berechneUmfang() zuzugreifen, da diese Methode nur in der Klasse Rechteck implementiert ist.

36
Q

Warum kann ein Vater-Objekt nicht direkt auf Sohn-Methoden zugreifen?

A

Die Vaterklasse kennt die spezifischen Methoden der Sohnklasse nicht, weshalb ein Casting erforderlich ist.

37
Q

Wie wirkt sich die Polymorphie auf Methodenaufrufe aus?

A

Überschriebene Methoden der Sohnklasse werden auch dann aufgerufen, wenn die Referenz den Typ der Vaterklasse hat.

38
Q

Каково практическое преимущество полиморфизма?

A

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

39
Q

Как можно избежать поведения родительского класса в дочернем классе?

A

Либо не переопределяя метод в дочернем классе, либо объявив метод в родительском классе как final.

40
Q

Was versteht man unter einer final-Klasse?

A

Класс, объявленный как final, не может быть расширен. Таким образом, поведение класса фиксировано.

41
Q

Какие свойства имеет константный (финальный) класс?

A

Он содержит только константные (финальные) переменные экземпляра и часто имеет приватный конструктор для предотвращения создания экземпляров.

42
Q

Когда имеет смысл использовать константный класс?

A

Когда класс содержит исключительно статические переменные и методы, которые могут быть вызваны напрямую (например, Math.PI).

43
Q

Чем отличается финальный метод от обычного метода?

A

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

44
Q

Kann eine Klasse gleichzeitig finale Instanz- und Klassenvariablen besitzen?

A

Ja, sie kann. Dies ist nützlich, wenn die Variablen festgelegt und unveränderlich bleiben sollen.

45
Q

Как реализуется финальный метод в классе?

A
public class Figur {
    public final void verschiebeAnker(int x, int y) {
        // Logik hier
    }
}
46
Q

Может ли финальный метод быть переопределён в другом классе, который не является подклассом?

A

Nein

47
Q

Каковы преимущества финальных классов и методов в разработке программного обеспечения?

A

Они повышают безопасность кода, предотвращая непреднамеренные изменения и ошибки через наследование или переопределение.

48
Q

Wie könnte man eine konstante Klasse in einer Bibliothek sinnvoll einsetzen?

A

Для математических констант или вспомогательных методов, которые необходимы во всём проекте (например, класс Utility).

49
Q
class A { private int x = 1; }
class B extends A { private int y = 2; }
class C extends B { private int z = 3; }
class D { private float f = 2.0f; }

public class Cast {
    public static void main(String[] args) {
        B b = new C();    // Valid ?
        A a = b;              // Valid ?
        Object o = b;    // Valid ?
        C c = (C) b;       // Valid ?
        C c2 = (C) o;    // Valid ?
        D d = (D) b;     // Valid ?
    }
}
A
B b = new C();      // Valid: Implicit upcast, C -> B
A a = b;               // Valid: Implicit upcast, B -> A
Object o = b;    // Valid: Implicit upcast, B -> Object
C c = (C) b;       // Valid: Explicit downcast, B -> C
C c2 = (C) o;    // Valid: Explicit downcast, Object -> C (b was originally C)
D d = (D) b;    // Invalid: D and B are unrelated classes
50
Q

Was ist eine abstrakte Klasse und wofür wird sie verwendet?

A

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