Métodos virtuais

Um método virtual permite que sejam definidas implementações padrão para classes abstract(abstratas) e permitem que uma classe filha sobreponha seu comportamento, isso é diferente de esconder métodos.

public abstract class Discador : GLib.Object {
   public abstract string nome { get; protected set; }
   public abstract void atualizar (string novo_nome);
   public virtual bool restaurar ()
   {
      nome = "Sem nome";
      return true;
   }
}

public class ContatoCV : Discador
{
   public override string nome { get; protected set; }
   public override void atualizar (string novo_nome)
   {
     nome = "ContatoCV - " + novo_nome;
   }
   public override bool restaurar ()
   {
      nome = "ContatoCV-Nome";
      stdout.printf ("CotatoCV.restaurar () implemetação!\n");
      return true;
   }
}

public class Contato : Discador {
   public override string nome { get; protected set; }
   public override void atualizar (string novo_nome)
   {
     name = "Contato - " + novo_nome;
   }

   public static void main ()
   {
      var c = new Contato ();
      c.atualizar ("John Strauss");
      stdout.printf(@"Nome: $(c.nome)\n");
      c.restaurar ();
      stdout.printf(@"Restaurar Nome: $(c.nome)\n");

      var cv = new ContatoCV ();
      cv.atualizar ("Xochitl Calva");
      stdout.printf(@"Nome: $(cv.nome)\n");
      cv.restaurar ();
      stdout.printf(@"Restaurar Nome: $(cv.nome)\n");
      stdout.printf("FIM\n");
   }
}

Como você pode ver no exemplo acima, Discador é uma classe abstrata(abstract) definindo uma propriedade abstrata e um método abstrato, mas adiciona um método virtual que pode ser sobreposto pela classe derivada. A classe Contato implementa métodos e propriedades abstratas de Discador, enquanto usa a implementação padrão de restaurar() por não definir uma nova. A classe ContatoCV implemeta todas as definições abstratas do Discador, mas sobrepõe restaurar() para definir uma implementação própria.

results matching ""

    No results matching ""