Hallo,
ich hab folgende Aufgabe:
Erstellen Sie innere Klassen die die minimale Lösung der nachfolgenden Vererbungsbedingungen enthält. Eine minimale Lösung verwendet möglichst abstrakte Vererbungen.
Die Bedingungen sind:
1. Variablen jedes Typs können mit einem frisch allokierten Objekt initialisiert werden.
2. Alle Variablen können einer Variable vom Typ S zugewiesen werden.
3. P, Q und T sind Subtypen von R.
4. U und V sind keine Subtypen von R.
5. P, Q und V sind Subtypen von U, T jedoch nicht.
6. Q ist Subtyp von T.
7. R und T sind abstrakte Klassen.
8. Alle Objekte vom Typ V sind auch vom Typ M.
9. M ist ein Subtyp von V und implementiert kein Interface direkt.
10. Es gibt keine Subtypen von Q, K und M.
Hinweise Alle inneren Typen müssen public static sein, da ihre Abgabe sonst nicht bewertet werden kann. Außerdem können Ihre Klassen leere Rümpfe haben, da es hier nur um die Vererbung an sich geht. Sie dürfen keine privaten Konstruktoren definieren. Sie dürfen Klassen, abstrakte Klassen und Interfaces verwenden. Verwenden Sie keine Imports und produzieren Sie keine Ausgabe. Achten Sie auf exakte Groß-/Kleinschreibung. Verändern Sie nur den markierten Bereich. Die Bewertung erfolgt durch eine Main-Funktion in einer anderen Klasse.
Nun hab ich folgendes gemacht:
Jedoch funktioniert mein Programm nicht, wenn ich es mit der bereitgestellten Testklasse prüfe....
Kann mir da jemand helfen?
ich hab folgende Aufgabe:
Erstellen Sie innere Klassen die die minimale Lösung der nachfolgenden Vererbungsbedingungen enthält. Eine minimale Lösung verwendet möglichst abstrakte Vererbungen.
Die Bedingungen sind:
1. Variablen jedes Typs können mit einem frisch allokierten Objekt initialisiert werden.
2. Alle Variablen können einer Variable vom Typ S zugewiesen werden.
3. P, Q und T sind Subtypen von R.
4. U und V sind keine Subtypen von R.
5. P, Q und V sind Subtypen von U, T jedoch nicht.
6. Q ist Subtyp von T.
7. R und T sind abstrakte Klassen.
8. Alle Objekte vom Typ V sind auch vom Typ M.
9. M ist ein Subtyp von V und implementiert kein Interface direkt.
10. Es gibt keine Subtypen von Q, K und M.
Hinweise Alle inneren Typen müssen public static sein, da ihre Abgabe sonst nicht bewertet werden kann. Außerdem können Ihre Klassen leere Rümpfe haben, da es hier nur um die Vererbung an sich geht. Sie dürfen keine privaten Konstruktoren definieren. Sie dürfen Klassen, abstrakte Klassen und Interfaces verwenden. Verwenden Sie keine Imports und produzieren Sie keine Ausgabe. Achten Sie auf exakte Groß-/Kleinschreibung. Verändern Sie nur den markierten Bereich. Die Bewertung erfolgt durch eine Main-Funktion in einer anderen Klasse.
Nun hab ich folgendes gemacht:
Code:
import java.lang.reflect.Modifier;
public class Subtypes {
public static class K implements S{}
public static class M extends V implements S{}
public static class P extends R implements U, S{}
public static class Q extends T implements U, S {}
public static abstract class R implements S{}
public static interface S{}
public static abstract class T extends R implements S{}
public static interface U extends S {}
public static class V implements U, S{}
// BEGIN Fügen Sie hier Ihre Typdefinitionen ein
// public static ... {}
// END Fügen Sie hier Ihre Typdefinitionen ein
}
Jedoch funktioniert mein Programm nicht, wenn ich es mit der bereitgestellten Testklasse prüfe....
Kann mir da jemand helfen?
Code:
import java.lang.reflect.Modifier;
public class SubtypesTest {
public static void main(String[] args) {
// run with -ea !
try {
assert false;
System.err.println("Assertions disabled! Some errors will not be detected!");
} catch (AssertionError u) {
// assertions are enabled
}
// Aufgabenbedingungen
// Anm.: hier sind nicht alle Bedingungen abgebildet, da sie sich z.T.
// nicht direkt prüfen lassen
Subtypes.K k = null;
Subtypes.M m = null;
Subtypes.P p = null;
Subtypes.Q q = null;
Subtypes.R r = null;
Subtypes.T t = null;
Subtypes.U u = null;
Subtypes.V v = null;
Subtypes.S s = null;
// 1. (kein Code)
// 2.
s = k;
s = m;
s = p;
s = q;
s = r;
s = t;
s = u;
s = v;
// 3.
r = p;
r = q;
r = t;
// 4.
assert !Subtypes.R.class.isAssignableFrom(Subtypes.U.class);
assert !Subtypes.R.class.isAssignableFrom(Subtypes.V.class);
// 5.
u = p;
u = q;
u = v;
assert !Subtypes.U.class.isAssignableFrom(Subtypes.T.class);
// 6.
t = q;
// 7.
assert 0 != (Subtypes.R.class.getModifiers() & Modifier.ABSTRACT);
assert 0 != (Subtypes.T.class.getModifiers() & Modifier.ABSTRACT);
// 8. (kein Code)
// 9.
v = m;
assert 0 == Subtypes.M.class.getInterfaces().length;
// 10. (kein Code)
}
}