package pokusy;

/*******************************************************************************
 * Testovací třída Matka slouží k demonstraci funkcí, procesů a závislostí,
 * které souvisejí se zavedenm dědičnosti. 
 *
 * @author    Rudolf Pecinovský
 * @version   1.00,  05.2004
 */
public class Matka
{
//== KONSTANTNÍ ATRIBUTY TŘÍDY =================================================
//== PROMĚNNÉ ATRIBUTY TŘÍDY ===================================================

    /** Počet dosud vytvořených instancí. */
    private static int m_počet  = 0;


//== KONSTANTNÍ ATRIBUTY INSTANCÍ ==============================================

    /** Pořadí vytvoření dané instance v rámci třídy. */
    private int m_pořadí = ++m_počet;
    
    /** Název instance určený pro pozdější identifikaci podobjektů. */
    private String název = "Matka_" + m_počet;


//== PROMĚNNÉ ATRIBUTY INSTANCÍ ================================================
//== PŘÍSTUPOVÉ METODY VLASTNOSTÍ TŘÍDY ========================================
//== OSTATNÍ METODY TŘÍDY ======================================================
  
    /***************************************************************************
     * Metoda slouží k demonstraci relativní nezavislosti statických metod
     * na definici stejnojmenné metody v dceřiné třídě.     
     */
    public static void zpráva( String text )
    {
        System.out.println( text + " (M)" );
    }
   
    

//##############################################################################
//== KONSTRUKTORY A TOVÁRNÍ METODY =============================================

    /***************************************************************************
     * Implicitní konstruktor vypíše na stadnardní výstup zprávu o vytvoření
     * instance s uvedením jejího pořadí.     
     */
    public Matka()
    {
        System.out.println( "\nVytvářím " + m_pořadí + 
            ". instanci třídy Matka " );
    }
    

    /***************************************************************************
     * Jednoparametrický konstruktor přidá za zprávu, kterou by vypsal 
     * implicitní konsturktor ještě text, který převzal jako parametr.
     */
    public Matka( String s )
    {
        System.out.println( "\nVytvářím " + m_pořadí + 
            ". instanci třídy Matka " + s );
    }
    


//== PŘÍSTUPOVÉ METODY VLASTNOSTÍ INSTANCÍ =====================================
//== PŘEKRYTÉ METODY IMPLEMENTOVANÝCH ROZHRANÍ =================================
//== PŘEKRYTÉ ABSTRAKTNÍ METODY RODIČOVSKÉ TŘÍDY ===============================
//== PŘEKRYTÉ KONKRÉTNÍ METODY RODIČOVSKÉ TŘÍDY ================================
//== NOVĚ ZAVEDENÉ METODY INSTANCÍ =============================================

    /***************************************************************************
     * Metoda slouží k demonstraci vlivu překrytí volané metody
     * na funkci volající metody.     
     */
    public void matka() 
    {
        System.out.println( "\nMetoda matka() instance " + this +
                            "\n  Název podobjektu: " + název );
        soukromá();
        veřejná();
        System.out.println( název + ".matka - konec");
    }
    

    /***************************************************************************
     * Metoda slouží k demonstraci chování veřejných metod 
     * volaných ze zděděných metod.
     */    
    public void veřejná()
    {
        System.out.println("  Třída Matka, metoda veřejná(): " + 
                         "\n    Podobjekt: " + název +
                         "\n    Instance:  " + this  );
    }
    

    /***************************************************************************
     * Metoda slouží k demonstraci chování statických metod
     * v hierarchii dědičnosti.
     */    
    public void zprávy()
    {
        zpráva( "\nMatka - moje zpráva" );
//         Matka .zpráva( "- Zpráva matky"  );
//         Dcera .zpráva( "- Zpráva dcery"  );
//         Vnučka.zpráva( "- Zpráva vnučky" );
    }



//== SOUKROMÉ A POMOCNÉ METODY TŘÍDY ===========================================
//== SOUKROMÉ A POMOCNÉ METODY INSTANCÍ ========================================

    /***************************************************************************
     * Metoda slouží k demonstraci chování soukromých metod 
     * volaných ze zděděných metod.
     */
    private void soukromá()
    {
        System.out.println("  Třída Matka, metoda soukromá(): " + 
                         "\n    Podobjekt: " + název +
                         "\n    Instance:  " + this  );
    }



//== VNOŘENÉ A VNITŘNÍ TŘÍDY ===================================================
//== TESTY A METODA MAIN =======================================================
}

