class UFOobservation { private final double tid, x, y; public UFOobservation(double tid, double x, double y) { this.tid = tid; this.x = x; this.y = y; } public boolean equals(Object o) { if (!(o instanceof UFOobservation)) return false; UFOobservation u = (UFOobservation)o; return this.tid == u.tid && this.x == u.x && this.y == u.y; } // equals static boolean liknande(UFOobservation o1, UFOobservation o2) { return Math.abs(o1.tid - o2.tid) < 1 && Math.abs(o1.x - o2.x) < 1 && Math.abs(o1.y - o2.y) < 1; } } // class UFOobservation class OmöjligUFOobservationException extends Exception { } class UFOobservation2 { private final double tid, x, y; public UFOobservation2(double tid, double x, double y) throws OmöjligUFOobservationException { if (tid < 0 || x < 0 || y < 0) throw new OmöjligUFOobservationException(); this.tid = tid; this.x = x; this.y = y; } public boolean equals(Object o) { if (!(o instanceof UFOobservation)) return false; UFOobservation2 u = (UFOobservation2)o; return this.tid == u.tid && this.x == u.x && this.y == u.y; } // equals static boolean liknande(UFOobservation2 o1, UFOobservation2 o2) { return Math.abs(o1.tid - o2.tid) < 1 && Math.abs(o1.x - o2.x) < 1 && Math.abs(o1.y - o2.y) < 1; } } // class UFOobservation2 class AvanceradUFOobservation extends UFOobservation { private final double höjd; public AvanceradUFOobservation(double tid, double x, double y, double höjd) { super(tid, x, y); this.höjd = höjd; } public boolean equals(Object o) { if (o instanceof AvanceradUFOobservation) { AvanceradUFOobservation u = (AvanceradUFOobservation)o; return super.equals(o) && this.höjd == u.höjd; } else if (o instanceof UFOobservation) return super.equals(o); else return false; } // equals } // class AvanceradUFOobservation /* public boolean equals(Object o) { if (!(o instanceof AvanceradUFOobservation)) return false; AvanceradUFOobservation u = (AvanceradUFOobservation)o; return super.equals(o) && this.höjd == u.höjd; } // equals */ class UFOtest { public static void main(String[] arg) { UFOobservation o1 = new UFOobservation(1, 2, 3); UFOobservation o2 = new UFOobservation(1, 2, 3); UFOobservation o3 = new UFOobservation(1.5, 2.9, 2.1); System.out.println("o1.equals(o2): " + o1.equals(o2)); System.out.println("o1.equals(o3): " + o1.equals(o3)); System.out.println("liknande(o1, o2)): " + UFOobservation.liknande(o1, o2)); System.out.println("liknande(o1, o3)): " + UFOobservation.liknande(o1, o3)); try { UFOobservation2 o4 = new UFOobservation2(1, 2, 3); UFOobservation2 o5 = new UFOobservation2(1, 2, -3); UFOobservation2 o6 = new UFOobservation2(1.5, 2.9, 2.1); } catch (OmöjligUFOobservationException e) { System.out.println("Fångat: " + e); } AvanceradUFOobservation ao1 = new AvanceradUFOobservation(1, 2, 3, 4); AvanceradUFOobservation ao2 = new AvanceradUFOobservation(1, 2, 3, 5); System.out.println("o1.equals(ao1): " + o1.equals(ao1)); System.out.println("ao1.equals(o1): " + ao1.equals(o1)); System.out.println("o1.equals(ao2): " + o1.equals(ao2)); System.out.println("ao2.equals(o1): " + ao2.equals(o1)); System.out.println("ao1.equals(ao2): " + ao1.equals(ao2)); System.out.println("ao2.equals(ao1): " + ao2.equals(ao1)); } // main } // class UFOtest