/* * Olio-ohjelmoinnin perusteet I. * * Testataan laatikkoa. * * Jorma Laurikkala (jorma.laurikkala@tuni.fi). * * Viimeksi muutettu 11.2.2020. * */ // Otetaan käyttöön gregoriaaninen kalenteri ja sen yliluokka. Luokan oliot ovat muuttuvia. import java.util.GregorianCalendar; import java.util.Calendar; public class LaatikkoTesti { public static void main(String[] args) { // Luodaan kaksi kalenteria ja vastaus kaikkiin kysymyksiin. GregorianCalendar kalenteri1 = new GregorianCalendar(2020, 2, 11); GregorianCalendar kalenteri2 = new GregorianCalendar(2020, 2, 11); Integer vastaus = new Integer(42); // Laitetaan oliot laatikoihin. Laatikko laatikko1 = new Laatikko(kalenteri1, true); Laatikko laatikko2 = new Laatikko(kalenteri2, true); Laatikko laatikko3 = new Laatikko(vastaus, false); // Vertaillaan laatikkoja. System.out.println(laatikko1.equals(laatikko1)); // true System.out.println(laatikko1.equals(laatikko2)); // true System.out.println(laatikko2.equals(laatikko1)); // true System.out.println(laatikko1.equals(null)); // false (Laatikon equals-metodissa tapahtuu poikkeus.) System.out.println(laatikko3.equals(laatikko1)); // false (Integer-luokan equals-metodissa tapahtuu poikkeus, // kun havaitaan, että vertailtava ei ole kokonaisluku.) // Tarkistetaan, että hajautuskoodi on sama, kun equals-palauttaa true-arvon. System.out.println(laatikko1.hashCode()); // -572034877 System.out.println(laatikko2.hashCode()); // -572034877 System.out.println(laatikko3.hashCode()); // 18876 // Monistetaan laatikko. Laatikko kopio = laatikko1.syväkopioi(); // Tarkistetaan, että laatikot ja sisällöt ovat erilliset. System.out.println(laatikko1 != kopio); // true System.out.println(laatikko1.sisältö() != kopio.sisältö()); // true // Tarkistetaan, että laatikot ja sisällöt ovat tiedoiltaan samat. // (Jo ensimmäinen equals riittäisi sisällön vertailuun.) System.out.println(laatikko1.equals(kopio)); // true System.out.println(laatikko1.sisältö().equals(kopio.sisältö())); // true // Muokataan alkuperäisen olion sisältöä (osaoliota) ja tarkistetaan, // että muutos ei heijastu kopion sisältöön (osaolioon). kalenteri1.add(Calendar.DAY_OF_MONTH, 1); System.out.println(laatikko1.sisältö().equals(kopio.sisältö())); // false } }