Sem II (Program I) - N6 Flashcards
Was unterscheidet eine abstrakte Klasse von einer konkreten Klasse?
Абстрактные классы могут содержать абстрактные методы, которые имеют только заголовок метода, но не имеют тела. Конкретные классы, напротив, содержат полностью реализованные методы и могут быть инстанцированы.
Was passiert, wenn eine Subklasse nicht alle abstrakten Methoden der Basisklasse implementiert?
Подкласс сам становится абстрактным и не может быть инстанцирован, пока не будут реализованы все абстрактные методы.
Wie wird Polymorphie in Verbindung mit abstrakten Klassen realisiert?
Полиморфизм реализуется через использование абстрактных классов, где вызовы методов определяются в абстрактном классе и могут быть по-разному реализованы в подклассах.
Приведите пример абстрактного метода.
public abstract double berechneFlaeche(); // Этот метод является абстрактным и должен быть реализован в каждом подклассе.
Warum verwendet man abstrakte Klassen statt Schnittstellen?
Абстрактные классы подходят, когда требуется общий базовый класс для нескольких подклассов, который может содержать как абстрактные, так и неабстрактные методы.
Was ist der Unterschied zwischen Up-Casting und Down-Casting in Bezug auf Polymorphie?
Повышающее приведение: Неявное приведение от подкласса к его суперклассу, при котором ограничивается видимость.
Up-Casting: Like saying “a dog is an animal.” Everyone agrees, no fuss, no risk.
class Animal { void makeSound() { System.out.println("Some generic animal sound"); } } class Dog extends Animal { void makeSound() { System.out.println("Bark"); } void wagTail() { System.out.println("Wagging tail"); } } public class Main { public static void main(String[] args) { Dog dog = new Dog(); // Dog instance Animal animal = dog; // Up-casting (implicit) animal.makeSound(); // Output: Bark (Polymorphism in action) // animal.wagTail(); // Error: wagTail() is not visible to Animal reference } }
Понижающее приведение: Явное приведение от суперкласса к подклассу, которое работает только если объект действительно является экземпляром подкласса.
Down-Casting: Like saying “this animal is definitely a dog.” You’d better check before assuming,
```
public class Main {
public static void main(String[] args) {
Animal animal = new Dog(); // Up-casting
Dog dog = (Dog) animal; // Down-casting (explicit)
dog.makeSound(); // Output: Bark
dog.wagTail(); // Output: Wagging tail
}
}
~~~
Wie wird sichergestellt, dass eine Methode in allen Subklassen implementiert wird?
Путем объявления его как абстрактного метода в абстрактном классе.
Wann macht die Verwendung abstrakter Klassen Sinn?
Когда нужно определить общие свойства или методы для нескольких классов, но при этом не требуются экземпляры базового класса.
Was passiert, wenn eine abstrakte Klasse polymorphe Methoden enthält?
Эти методы могут быть непосредственно использованы или переопределены подклассами для определения специфического поведения
Was ist eine abstrakte Methode und wo wird sie implementiert?
Абстрактный метод - это метод без реализации, который должен быть реализован в подклассе. Он определяется в абстрактных классах и полностью реализуется в конкретных подклассах.
Kann eine abstrakte Klasse „normale” (nicht abstrakte) Methoden enthalten?
Да, абстрактные классы могут содержать полностью реализованные методы.
Wozu werden abstrakte Methoden benötigt?
Абстрактные методы позволяют устанавливать единообразные заголовки методов для всех подклассов, обеспечивая полиморфизм и согласованный интерфейс.
Muss eine Subklasse einer abstrakten Klasse alle abstrakten Methoden implementieren?
Да, если только сам подкласс не является абстрактным.
Warum gibt es in Java keine Mehrfachvererbung?
Множественное наследование в Java избегается, чтобы предотвратить неоднозначности, которые могут возникнуть в “diamond-структуре”. Например, водный самолет может наследовать различные методы move() от Корабль и Самолет, что может привести к конфликтам.
Was ist ein Interface und wie wird es deklariert?
Интерфейс - это полностью абстрактный класс, который не содержит реализаций, а только определяет заголовки методов и константы. Он объявляется с ключевым словом interface:
public interface Spielfigur { void zeichne(); void loesche(); }
Welche Vorteile hat die Verwendung von Interfaces gegenüber abstrakten Klassen?
Интерфейсы позволяют имитировать множественное наследование, так как класс может реализовывать несколько интерфейсов. Кроме того, они определяют четкие контракты, которые должны соблюдаться при реализации.
Was passiert, wenn man Methoden in abstrakten Klassen implementiert, die für Subklassen irrelevant sind?
Методы могут привести к избыточности для несущественных подклассов и создавать ложное впечатление, что метод имеет смысл.
Wie implementiert man ein Interface in einer Klasse?
Класс реализует интерфейс с ключевым словом implements и должен переопределить все абстрактные методы интерфейса:
public class Kreis implements Spielfigur { @Override public void zeichne() { // Implementierung } }
Was ist eine Schnittstelle in Java, und wie wird sie deklariert?
Интерфейс в Java объявляется с помощью ключевого слова interface. Он состоит из:
Констант (автоматически public static final и инициализированных).
Сигнатур методов экземпляра (автоматически public abstract).
public interface Tier { int ALTER = 5; // Methodensignaturen (ohne Implementierung) void fressen(); void schlafen(); } public class Hund implements Tier { @Override public void fressen() { System.out.println("Der Hund frisst."); } @Override public void schlafen() { System.out.println("Der Hund schläft."); } public void bellen() { System.out.println("Der Hund bellt."); } public static void main(String[] args) { Hund meinHund = new Hund(); meinHund.fressen(); // Ausgabe: Der Hund frisst. meinHund.schlafen(); // Ausgabe: Der Hund schläft. meinHund.bellen(); // Ausgabe: Der Hund bellt. } }
Was bedeutet es, wenn eine Klasse ein Interface implementiert?
Класс наследует все константы и абстрактные методы интерфейса и должен их реализовать.
Was ist das Ziel von Schnittstellenhierarchien?
1. Schnittstellen können von anderen Schnittstellen erben (z. B. public interface S extends S1).
2. Mehrfachvererbung ist bei Schnittstellen erlaubt, bei Klassen jedoch nicht.
Was ist ein Beispiel für eine konkrete Schnittstelle und deren Implementierung?
public interface Gleichseitig { public static final int DREIECKIG = 3; public abstract int getSeitenanzahl(); } public class Quadrat implements Gleichseitig { public int getSeitenanzahl() { return 4; } }
Wie funktioniert Mehrfachvererbung bei Schnittstellen?
public interface S extends S1, S2 {...}
Welche Beziehung besteht zwischen Klassen, Schnittstellen und Objekten?
1. Ein Objekt kann Typen seiner Klassenhierarchie und aller implementierten Schnittstellen annehmen.
2. Beispiel: Spielfigur spiel = q1; (wobei q1 ein Quadrat ist).
Welche Sichtbarkeitsregeln gelten für Konstanten und Methoden in Schnittstellen?
Константы в интерфейсах неявно являются public, static и final, и должны быть всегда инициализированы. Вы не можете определять частные или защищенные константы.
Методы в интерфейсах по умолчанию являются public. Начиная с Java 8, они также могут быть default или static, причем все заголовки методов должны быть либо абстрактными, либо полностью реализованными.
Почему интерфейсы полезны для параллельных, независимых реализаций в команде разработчиков?
Интерфейсы служат контрактом между компонентами системы. Они определяют необходимые методы и их сигнатуры, не предписывая внутреннюю реализацию.
Это позволяет командам одновременно работать над различными классами или модулями, реализующими один и тот же интерфейс, не создавая взаимных зависимостей.
Warum bleiben Änderungen in einer Methode einer Schnittstelle stabil und beeinflussen andere Klassen nicht?
Интерфейс определяет только сигнатуру (заголовок метода), но не реализацию метода.
Изменения в теле метода в реализующем классе не влияют на другие классы, так как они продолжают работать с неизменной сигнатурой.
Какие существуют сходства между абстрактными классами и интерфейсами?
1. Оба служат для абстракции и могут использоваться как базовый тип для других классов.
2. Они могут содержать методы, которые должны быть переопределены в производных классах.
Какие существуют различия между абстрактными классами и интерфейсами?
1. Абстрактные классы могут содержать переменные, конструкторы и как абстрактные, так и реализованные методы.
2. Класс может наследовать только один абстрактный класс, но реализовывать несколько интерфейсов.
Was ist das Konzept der Mehrfachvererbung in Java, und wie bieten Schnittstellen eine sichere Alternative dazu?
Множественное наследование позволяет классу наследоваться от нескольких базовых классов, что может привести к конфликтам, например, из-за одинаковых имен методов (проблема ромба).
Интерфейсы в Java предоставляют безопасную альтернативу, так как:
— Класс может реализовывать несколько интерфейсов без конфликтов в реализации методов.
— Интерфейсы не определяют состояния (переменные экземпляра), которые могли бы привести к конфликтам.
Как визуализируется интерфейс в UML, и какие компоненты при этом учитываются?
В UML интерфейс представляется прямоугольным символом с именем, написанным курсивом, часто со стереотипом «interface».
Was ist der Hauptunterschied zwischen einer abstrakten Klasse und einer Schnittstelle in Bezug auf die Vererbungshierarchie?
Абстрактный класс должен быть корнем дерева классов и принуждает все производные классы к отношениям родства. Интерфейсы независимы от иерархии наследования и могут гибко реализовываться там, где они необходимы.
Was passiert, wenn eine Klasse sowohl von einer abstrakten Basisklasse erbt als auch Schnittstellen implementiert?
Класс может перенимать свойства и методы базового класса и получать дополнительную функциональность через реализуемые интерфейсы.
Какая связь существует между объектом и типами классов и интерфейсов, которые он наследует или реализует?
Объект всегда является также типом всех классов и интерфейсов, от которых он наследуется или которые реализует.
Welche Vorteile bieten Schnittstellen gegenüber abstrakten Klassen in Bezug auf Flexibilität?
Интерфейсы не привязаны к иерархии наследования, класс может реализовывать любое их количество, и они позволяют глобально определять константы.
Wie unterstützt eine Schnittstelle die Kapselung?
Вызывающей стороне нужно знать только интерфейс класса, чтобы использовать его функциональность. Реализация остается скрытой.
Was ist der Unterschied zwischen Programmieren im Großen und im Kleinen?
Программирование в большом масштабе относится к проектированию системы (например, через пакеты), в то время как программирование в малом масштабе включает реализацию отдельных компонентов.
Wofür werden Pakete in Java verwendet?
Пакеты служат для группировки классов и интерфейсов, обеспечивают защиту доступа и собственное пространство имён для избежания конфликтов имён.
Wie definiert man ein Paket in Java?
Mit der Anweisung package am Anfang der Datei, z. B. package geometrie;.
Welche Zugriffsrechte gelten innerhalb und außerhalb eines Pakets?
Innerhalb eines Pakets sind alle Klassen sichtbar, außerhalb nur die als public deklarierten Komponenten.
Wie werden Pakete hierarchisch organisiert?
Pakete können Unterpakete enthalten, die mit einem Punkt getrennt definiert werden, z. B. package geometrie.rundefigur.
Was ist der Zweck des Imports in Java?
Команда import используется, чтобы избежать необходимости полностью квалифицированных имён, например, import kreispaket.Kreis;.
Was passiert, wenn ein Paket importiert wird? Werden Unterpakete auch importiert?
Nein, Unterpakete müssen separat importiert werden, z. B. import paket.unterpaket.;.Nein, Unterpakete müssen separat importiert werden, z. B. import paket.unterpaket.;.
Wie kann man gezielt einzelne Klassen oder Schnittstellen importieren?
С помощью синтаксиса import paket.Klasse; можно импортировать определённые компоненты пакета.
Какие существуют примеры стандартных пакетов Java и что они содержат?
java.lang: Классы такие как System (например, System.out.println) и Math.
java.io: Классы для ввода-вывода.
java.net: Классы для сетевых приложений.
java.awt: Классы для графических интерфейсов.
Was sind die Konventionen bei der Benennung von Paketen?
Имена пакетов должны писаться в нижнем регистре и отражать структуру проекта.
Wozu dienen Pakete in Java?
Пакеты служат для организации классов и интерфейсов, чтобы избежать конфликтов имен и улучшить читаемость кода.
Können Klassen zu mehreren Paketen gehören?
Nein, eine Klasse kann nur zu einem Paket gehören.
Was kann ein Paket enthalten?
Пакет может содержать классы, интерфейсы, перечисления и подпакеты.
Какой самый верхний пакет в Java и как он импортируется?
Самый верхний пакет в Java - это java.lang. Он импортируется автоматически и содержит часто используемые классы, такие как String и Math.