1
resposta

[Polimorfismo ] Por quê a classe instanciada não encontra os métodos e atributos de sua classe?

Se tratando de polimorfismo, porque o objeto B instanciado não conseguiu encontrar os atributos e metodos de sua classe? Porque eu sei que se eu fizer assim: "B exemploB = new B();" a classe B encontrar todos os atributos e metodos eu só queria entender o conceito do porque um objeto instanciado não consegue encontar os metodos e atributos de sua classe.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Atividade {

    public class A {
        public string nome;
        public string cpf;

        public void MetodoA() {
            Console.WriteLine("metodo da classe exemplo");
        }
    }

    public class B : A {
        public string atributo1;
        public string atributo2;

        public void metodoB() {
            Console.WriteLine("metodo da classe B");
        }
    }

    public class Executa {
        public static void Main(String[] args) {

            A exemploA = new B();
            exemploA.nome = "Carlos";
            exemploA.cpf = "123456789";
            exemploA.MetodoA();

            exemploA.atributo1;// não encontra o atributo1 da classe B  
            exemploA.atributo2;// não encontra o atributo2 da classe B  
            exemploA.metodoB();// não encontra o metodoB da classe B  
        }
    }
}
1 resposta

Ola Alan,

Se tratando de polimorfismo, porque o objeto B instanciado não conseguiu encontrar os atributos e metodos de sua classe? E porque você pediu para instancia do objeto B** se transformar num objeto **A e sua classe A não possui os metodos atributo1, atributo2 e metodoB.

Estou montando um outro exemplo de polimorfismo em cima do exemplo que você montou.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Atividade
{

    public class A
    {
        public string nome;
        public string cpf;

        public virtual void Mensagem()
        {
            Console.WriteLine("metodo da classe A");
        }
    }

    public class B : A
    {
        public string atributo1;
        public string atributo2;

        public override void Mensagem()
        {
            Console.WriteLine("metodo da classe B");
        }
    }

    public class C : A
    {
        public string atributo1;
        public string atributo2;

        public override void Mensagem()
        {
            Console.WriteLine("metodo da classe C");
        }
    }

    public class Executa
    {
        public static void Main(String[] args)
        {
            ExibirMensagem(new A());
            ExibirMensagem(new B());
            ExibirMensagem(new C());
        }

        public static void ExibirMensagem(A exemplo)
        {
            exemplo.Mensagem();
        }
    }
}

Executa este exemplo, e você vera que as classe A recebe uma instancia B e C ela se executar outro método diferente do A. Este e o comportamento de mudança de forma do polimorfismo. Caso não tenha ficado claro , da uma lida nesta apostila que fala um pouco mais sobre orientação objeto que pode te ajudar a fixar melhor este conceito.

https://www.caelum.com.br/apostila-csharp-orientacao-objetos/heranca/#reaproveitando-a-implementao-da-classe-base

Abs Douglas

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software