1   /**
2    * Luokan laajentaminen koostamalla
3    * @author  Vesa Lappalainen
4    * @version 1.0, 01.02.2003
5    */
6   public class AikaSek7 {
7   
8     private Aika5 hm = new Aika5();
9     private int s = 0;
10  
11    /**
12     * Asettaa uuden ajan ja pitää huolen että aika on aina oikeaa muotoa.
13     * @param h asetettavat tunnit
14     * @param m asetettavat minuutit
15     * @param s asetettavat sekunnit
16     */
17    public void aseta(int h,int m, int s) {
18      hm.aseta(h,m); this.s = s; lisaa(0,0);
19    }
20  
21    public void aseta(int h,int m) { aseta(h,m,0); }
22    public void aseta(int h)       { aseta(h,0);   }
23  
24    public AikaSek7() { }
25  
26    /**
27     * Alustaa ajan
28     * @param h tunnit
29     * @param m minuutit
30     * @param s sekunnit
31     */
32    public AikaSek7(int h,int m, int s) { // Muodostaja
33      aseta(h,m,s);
34    }
35  
36    public AikaSek7(int h,int m) { aseta(h,m,0); }
37    public AikaSek7(int h)       { aseta(h,0,0); }
38  
39    /**
40     * Tulostaa ajan muodossa 15:05
41     * @param lf tulostetaanko rivinvaihto vai ei
42     */
43    public void tulosta(boolean lf) {
44      hm.tulosta(false);
45      System.out.print(":" + (s<10?"0":"")+s);
46      if ( lf ) System.out.println();
47    }
48  
49    /**
50     * Tulostaa ajan muodossa 15:05 sekä aina rivinvaihdon
51     */
52    public void tulosta() {
53      tulosta(true);
54    }
55  
56    /**
57     * Lisää aikaan valitun minuuttimäärän
58     * @param lisa_min lisättävä minuuttimäärä
59     * @param lisa_sek lisättävä sekunttimäärä
60     */
61    public void lisaa(int lisa_min,int lisa_sek)  {
62      s += lisa_sek;
63      hm.lisaa(lisa_min+s/60);
64      s %= 60;
65    }
66  
67    public void lisaa(int lisa_min)  { lisaa(lisa_min,0); }
68  
69    public static void main(String[] args) {
70      Aika5 a1 = new Aika5();
71      Aika5 a2 = new Aika5(13);
72      Aika5 a3 = new Aika5(14,175);
73  
74      a1.tulosta();  a2.tulosta();  a3.tulosta();
75      a1.aseta(12,15); a2.aseta(16,-15);
76      a1.tulosta(); a2.tulosta();
77  
78      AikaSek7 a4 = new AikaSek7(14,55,45); a4.tulosta();
79      a4.lisaa(3,30); a4.tulosta();
80  
81      Object ajat[] = new Object[5];
82      ajat[0] = a1; ajat[1] = a2; ajat[2] = a3; ajat[3] = a4;
83      ajat[4] = new AikaSek7(23,59,59);
84  
85      // Kömpelö esimerkki polymorfisesta taulukosta, ei hyvä
86      for (int i=0; i < ajat.length; i++ ) {
87        if ( ajat[i] instanceof Aika5 ) {
88          Aika5 aika = (Aika5)ajat[i];  // pakotettu tyypin muunnos
89          aika.tulosta(false); System.out.print(" +" + i + " => ");
90          aika.lisaa(i); aika.tulosta();
91        }
92        if ( ajat[i] instanceof AikaSek7 ) {
93          AikaSek7 aika = (AikaSek7)ajat[i];  // pakotettu tyypin muunnos
94          aika.tulosta(false); System.out.print(" +" + i + " => ");
95          aika.lisaa(i); aika.tulosta();
96        }
97      }
98  
99    }
100 
101 }
102 
103