Hallo ihr Lieben, das ist mein erster Beitrag im Forum. 
Es geht um diese Aufgabe: "Kapsle das Gemeinsame in der Klasse Intervall und verteile das Spezifische in die neuen Klassen OpenInterval und ClosedInterval." Das ist die ursprüngliche Klasse:
	
	
	
	
	
		
	
Ich habe in einem Vorherigen Projekt "Intervall" realisiert. Nun habe ich probiert die funktionelle Methoden in die Sub. Klassen zu verschieben.
	
	
	
	
	
		
	
	
	
	
	
	
		
	
Um das zu Testen, habe ich die folgende Testklasse:
	
	
	
	
	
		
	
Wenn ich diese nun ausführen möchte, kommt zwar kein Fehler mehr, dafür übernimmt er nicht die definierten Werte, sondern nur Nullen. Das ist die Ausgabe:
	
	
	
	
	
		
	
Ich sehe meinen Fehler nicht und google etc. können mir leider auch nicht helfen. Habt ihre vielleicht eine Idee, wo mein Fehler ist?
Beste Grüße
			
			Es geht um diese Aufgabe: "Kapsle das Gemeinsame in der Klasse Intervall und verteile das Spezifische in die neuen Klassen OpenInterval und ClosedInterval." Das ist die ursprüngliche Klasse:
		Code:
	
	public class Interval {
    private int lowerBound;
    private int upperBound;
   
    public Interval() {
        this(0,0);
    }
   
    public Interval(Interval interval) {
        this(interval.lowerBound, interval.upperBound);
    }
   
    public Interval(int lowerBound, int upperBound) {
        this.lowerBound = lowerBound;
        this.upperBound = upperBound;
    }
   
    public static Interval copyInstance(Interval interval) {
        int lowerBound = interval.lowerBound;
        int upperBound = interval.upperBound;
        return new Interval(lowerBound, upperBound);
    }
   
    public boolean contains(double number) {
        if(isEmpty()) return false;
        if(number >= lowerBound && number <= upperBound) {
            return true;
        }
        return false;
    }
   
    public boolean contains(Interval interval) {
        if(isEmpty()) return false;
        if(interval.isEmpty()) return true;
        return contains(interval.lowerBound) && contains(interval.upperBound);
    }
   
    public boolean isDisjoint(Interval interval) {
        return isEmpty() || interval.isEmpty() ||lowerBound > interval.upperBound || upperBound < interval.lowerBound;
    }
   
    public Interval intersection(Interval interval) {
        if(isEmpty()) return this;
        if(interval.isEmpty()) return interval;
        return new Interval(Math.max(lowerBound, interval.lowerBound),
                        Math.min(upperBound, interval.upperBound));
    }
   
    public Interval hull(Interval interval) {
        if(isEmpty()) return interval;
        if(interval.isEmpty()) return this;
        return new Interval(Math.max(lowerBound, interval.lowerBound),
                        Math.min(upperBound, interval.upperBound));
    }
   
    public boolean isEmpty() {
        if(lowerBound == 0 && upperBound == 0) {
            return true;
        }
        return false;
    }
   
    public String toString() {
        if(isEmpty()) return "[]";
        return String.format("[%d, %d]", this.lowerBound, this.upperBound);
    }
   
    public boolean equals(Object object) {   
        if (! (object instanceof Interval)) return false;   
        Interval otherNumber = (Interval) object;   
        return this.lowerBound == otherNumber.getLowerBound() 
            && this.upperBound == otherNumber.getUpperBound();
    }
   
    public Interval clone() {   
        return new Interval(this.lowerBound, this.upperBound);
    }
   
    public int getLowerBound() {
        return lowerBound;
    }
    public void setLowerBound(int lowerBound) {
        this.lowerBound = lowerBound;
    }
    public int getUpperBound() {
        return upperBound;
    }
    public void setUpperBound(int upperBound) {
        this.upperBound = upperBound;
    }
   
}Ich habe in einem Vorherigen Projekt "Intervall" realisiert. Nun habe ich probiert die funktionelle Methoden in die Sub. Klassen zu verschieben.
		Code:
	
	public class Interval {
    private int lowerBound;
    private int upperBound;
   
    public Interval() {
        this(0,0);
    }
   
    public Interval(Interval interval) {
        this(interval.lowerBound, interval.upperBound);
    }
   
    public Interval(int lowerBound, int upperBound) {
        this.lowerBound = lowerBound;
        this.upperBound = upperBound;
    }
   
    public boolean isDisjoint(Interval interval) {
        return isEmpty() || interval.isEmpty() ||lowerBound > interval.upperBound || upperBound < interval.lowerBound;
    }
   
    public Interval intersection(Interval interval) {
        if(isEmpty()) return this;
        if(interval.isEmpty()) return interval;
        return new Interval(Math.max(lowerBound, interval.lowerBound),
                        Math.min(upperBound, interval.upperBound));
    }
   
    public Interval hull(Interval interval) {
        if(isEmpty()) return interval;
        if(interval.isEmpty()) return this;
        return new Interval(Math.max(lowerBound, interval.lowerBound),
                        Math.min(upperBound, interval.upperBound));
    }
   
    public boolean contains(double number) {
        if(isEmpty()) return false;
        if(number > lowerBound && number < upperBound) {
                return true;
        }
        return false;
    }
   
    public boolean isEmpty() {
        if(lowerBound == 0 && upperBound == 0) {
            return true;
        }
        return false;
    }
   
    public boolean equals(Object object) {   
        if (! (object instanceof Interval)) return false;   
        Interval otherNumber = (Interval) object;   
        return this.lowerBound == otherNumber.getLowerBound() 
            && this.upperBound == otherNumber.getUpperBound();
    }
   
    public Interval clone() {   
        return new Interval(this.lowerBound, this.upperBound);
    }
   
    public int getLowerBound() {
        return lowerBound;
    }
    public void setLowerBound(int lowerBound) {
        this.lowerBound = lowerBound;
    }
    public int getUpperBound() {
        return upperBound;
    }
    public void setUpperBound(int upperBound) {
        this.upperBound = upperBound;
    }
   
}
		Code:
	
	public class OpenInterval extends Interval{
    private int lowerBound;
    private int upperBound;
   
    public OpenInterval() {
        super(0,0);
    }
   
    public OpenInterval(OpenInterval interval) {
        super(interval.lowerBound, interval.upperBound);
    }
   
    public OpenInterval(int lowerBound, int upperBound) {
        super(lowerBound,upperBound);
    }
   
    public static OpenInterval copyInstance(OpenInterval interval) {
        int lowerBound = interval.lowerBound;
        int upperBound = interval.upperBound;
        return new OpenInterval(lowerBound, upperBound);
    }
   
    public OpenInterval hull(OpenInterval interval) {
        if(isEmpty()) return interval;
        if(interval.isEmpty()) return this;
        return new OpenInterval(Math.max(lowerBound, interval.lowerBound),
                        Math.min(upperBound, interval.upperBound));
    }
   
    public OpenInterval intersection(OpenInterval interval) {
        if(isEmpty()) return this;
        if(interval.isEmpty()) return interval;
        return new OpenInterval(Math.max(lowerBound, interval.lowerBound),
                        Math.min(upperBound, interval.upperBound));
    }
   
    public boolean contains(double number) {
        if(isEmpty()) return false;
        if(number >= lowerBound && number <= upperBound) {
                return true;
        }
        return false;
    }
   
    @Override
    public OpenInterval clone() {   
        return new OpenInterval(this.lowerBound, this.upperBound);
    }
   
    public String toString() {
        if(isEmpty()) return "[]";
        return String.format("[%d, %d]", this.lowerBound, this.upperBound);
    }
   
    public boolean contains(OpenInterval interval) {
        if(isEmpty()) return false;
        if(interval.isEmpty()) return true;
        return contains(interval.lowerBound) && contains(interval.upperBound);
    }
     
    public int getLowerBound() {
            return lowerBound;
    }
    public void setLowerBound(int lowerBound) {
            this.lowerBound = lowerBound;
    }
    public int getUpperBound() {
            return upperBound;
    }
    public void setUpperBound(int upperBound) {
            this.upperBound = upperBound;
    }
}Um das zu Testen, habe ich die folgende Testklasse:
		Code:
	
	public class IntervalTest {
   
    /**
     * Testprogramm für Intervalle.
     */
    public static void testOpenIntervals() {
        OpenInterval a = new OpenInterval(2, 5);
        System.out.format("a=%s", a);
        OpenInterval b = new OpenInterval(4, 6);
        System.out.format("%nb=%s", b);
        OpenInterval c = new OpenInterval(6, 9);
        System.out.format("%nc=%s", c);
        OpenInterval d = new OpenInterval(4,5);
        System.out.format("%ne=%s", d);
        OpenInterval empty = new OpenInterval();
        System.out.format("%nd=%s", empty);
        System.out.println();
       
        OpenInterval a2 = a.clone();
        System.out.format("%n%s geklont ergibt %s", a, a2);
        System.out.format("%nIs a2=%s equal to a=%s: -> %b", a2, a, a2.equals(a));
   
        OpenInterval b2 = OpenInterval.copyInstance(b);
        System.out.format("%n%s kopiert ergibt %s", b, b2);
        System.out.format("%nIs b2=%s equal to b=%s: -> %b", b2, b, b2.equals(b));
       
        System.out.format("%n%s.contains(%s) ? --> %b", a, empty, a.contains(empty));
        System.out.format("%n%s.contains(%s) ? --> %b", empty, a, empty.contains(a));
        System.out.format("%n%s.contains(%s) ? --> %b", empty, empty, empty.contains(empty));
        System.out.println();
   
        System.out.format("%n%s.hull(%s) = %s",   a, c, a.hull(c));
        System.out.format("%n%s.hull(%s).contains(%s) ? --> %b", a, c, b, a.hull(c).contains(b));
        System.out.println();
   
        System.out.format("%n%s.intersection(%s) = %s", a, c, a.intersection(c));
        System.out.format("%n%s.intersection(%s).isEmpty() ? --> %b", a, c, a.intersection(c).isEmpty());
        System.out.println();
   
       
        System.out.format("%n%s.disjoint(%s) ? --> %b", a, d, a.isDisjoint(d));
        System.out.format("%n%s.disjoint(%s) ? --> %b", a, c, a.isDisjoint(c));
        System.out.println();
       
        System.out.format("%n%s.intersection(%s) = %s", a, b, a.intersection(b));
        System.out.format("%n%s.intersection(%s).contains(%s) ? --> %b", a, b, b, ((OpenInterval) a.intersection(b)).contains(b));
        System.out.format("%n%s.intersection(%s).contains(%s) ? --> %b", a, b, d, a.intersection(b).contains(d));
    }
    public static void testCloseIntervals() {
        ClosedInterval a = new ClosedInterval(2, 5);
        System.out.format("a=%s", a);
        ClosedInterval b = new ClosedInterval(4, 6);
        System.out.format("%nb=%s", b);
        ClosedInterval c = new ClosedInterval(6, 9);
        System.out.format("%nc=%s", c);
        ClosedInterval d = new ClosedInterval(4,5);
        System.out.format("%ne=%s", d);
        ClosedInterval empty = new ClosedInterval();
        System.out.format("%nd=%s", empty);
        System.out.println();
       
        ClosedInterval a2 = a.clone();
        System.out.format("%n%s geklont ergibt %s", a, a2);
        System.out.format("%nIs a2=%s equal to a=%s: -> %b", a2, a, a2.equals(a));
       
        ClosedInterval b2 = ClosedInterval.copyInstance(b);
        System.out.format("%n%s kopiert ergibt %s", b, b2);
        System.out.format("%nIs b2=%s equal to b=%s: -> %b", b2, b, b2.equals(b));
       
        System.out.format("%n%s.contains(%s) ? --> %b", a, empty, a.contains(empty));
        System.out.format("%n%s.contains(%s) ? --> %b", empty, a, empty.contains(a));
        System.out.format("%n%s.contains(%s) ? --> %b", empty, empty, empty.contains(empty));
        System.out.println();
       
        System.out.format("%n%s.hull(%s) = %s",   a, c, a.hull(c));
        System.out.format("%n%s.hull(%s).contains(%s) ? --> %b", a, c, b, a.hull(c).contains(b));
        System.out.println();
       
        System.out.format("%n%s.intersection(%s) = %s", a, c, a.intersection(c));
        System.out.format("%n%s.intersection(%s).isEmpty() ? --> %b", a, c, a.intersection(c).isEmpty());
        System.out.println();
       
       
        System.out.format("%n%s.disjoint(%s) ? --> %b", a, d, a.isDisjoint(d));
        System.out.format("%n%s.disjoint(%s) ? --> %b", a, c, a.isDisjoint(c));
        System.out.println();
       
        System.out.format("%n%s.intersection(%s) = %s", a, b, a.intersection(b));
        System.out.format("%n%s.intersection(%s).contains(%s) ? --> %b", a, b, b, a.intersection(b).contains(b));
        System.out.format("%n%s.intersection(%s).contains(%s) ? --> %b", a, b, d, a.intersection(b).contains(d));
    }
   
   
    public static void main(final String[] args) {
        testOpenIntervals();
        testCloseIntervals();
    }
}Wenn ich diese nun ausführen möchte, kommt zwar kein Fehler mehr, dafür übernimmt er nicht die definierten Werte, sondern nur Nullen. Das ist die Ausgabe:
		Code:
	
	a=(0, 0)
b=(0, 0)
c=(0, 0)
e=(0, 0)
d=()
(0, 0) geklont ergibt ()
Is a2=() equal to a=(0, 0): -> true
(0, 0) kopiert ergibt ()
Is b2=() equal to b=(0, 0): -> true
(0, 0).contains(()) ? --> true
().contains((0, 0)) ? --> false
().contains(()) ? --> false
(0, 0).hull((0, 0)) = ()
(0, 0).hull((0, 0)).contains((0, 0)) ? --> false
(0, 0).intersection((0, 0)) = ()
(0, 0).intersection((0, 0)).isEmpty() ? --> true
(0, 0).disjoint((0, 0)) ? --> false
(0, 0).disjoint((0, 0)) ? --> true
(0, 0).intersection((0, 0)) = ()
(0, 0).intersection((0, 0)).contains((0, 0)) ? --> false
(0, 0).intersection((0, 0)).contains((0, 0)) ? --> falsea=[0, 0]Ich sehe meinen Fehler nicht und google etc. können mir leider auch nicht helfen. Habt ihre vielleicht eine Idee, wo mein Fehler ist?
Beste Grüße
 
				 
 
		 
 
		 
 
		 
 
		 
 
		 
 
		 
 
		 
 
		 
 
		 
 
		 
 
		 
 
		 
 
		 
 
		 
 
		 
 
		 
 
		 
 
		 
 
		 
 
		