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?
Класс наследует все константы и абстрактные методы интерфейса и должен их реализовать.