using static System.Console;
public abstract class Pessoa {
public abstract int Id { get; set; }
public abstract string Nome { get; set; }
public abstract void Andar();
}
public class Comprador : Pessoa {
public override int Id { get; set; }
public override string Nome { get; set; }
public override void Andar() => WriteLine("Comprador andou");
public void Comprar() => WriteLine("Comprou");
}
public class Vendedor : Pessoa {
public override int Id { get; set; }
public override string Nome { get; set; }
public override void Andar() => WriteLine("Vendedor andou");
public void Vender() => WriteLine("Vendeu");
}
public class Sistema {
public static void Main() {
var pessoaComprador = new Comprador();
pessoaComprador.Nome = "João";
pessoaComprador.Comprar();
UmOutroMetodo(pessoaComprador);
var pessoaVendedor = new Vendedor();
pessoaVendedor.Nome = "José";
pessoaVendedor.Vender();
UmOutroMetodo(pessoaVendedor);
}
//note que se passar um objeto do tipo Pessoa nem funcionaria de fato, deve ser conreto
public static void UmOutroMetodo(Pessoa pessoa) {
WriteLine(pessoa.Nome); //vai pegar o que foi usado na classe concreta
pessoa.Andar(); //vai lançar a exceção
}
}
//https://pt.stackoverflow.com/q/154421/101