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