Qual seria o resultado(SCJP#)?

15 respostas
ranophoenix
class A {
    public void Teste() {
      Console.WriteLine("teste de A");
    }
  }

  class B: A
  {
    public void Teste() 
    {
      Console.WriteLine("teste de B");
    }
  }

	class Class1
	{
		/// <summary>
		/// The main entry point for the application.
		/// </summary>
		[STAThread]
		static void Main(string[] args)
		{
			A a = new B();
      a.Teste();
      Console.Read();
		}
	}

Isso é para quem está achando q C# = JAVA e está querendo aproveitar de estar estudando para o SCJP e fazer um certificação em C# :smiley:

15 Respostas

T

Putz…essa foi foda!

Isso aqui é grupo de Java ou C# ??

Putz…

[]'s Tjmm.

Java_Vinicius_Machin

Tjmm:
Putz…essa foi foda!

Isso aqui é grupo de Java ou C# ??

Putz…

[]'s Tjmm.


doeu no fundo da alma!!! :hunf:

fmeyer

Q !$!@#$!$%#@$!%@#¨$%¨… :evil: :evil: :evil: :evil:

Mauricio_Linhares

Vai escrever:

Se você tá pensando que vai aprender C# estudando Java, só porque C# é “parecido” com Java, se prepare meu amigo, porque você vai cair do cavalo. C# é muito mais parecido com C++ e essas outras coisas bizarras do que com Java.

Estude os dois separados, porque não tem muita coisa haver não, a não ser a herança simples. O resto é C++ com um garbage collector e algumas classes com nomes parecidos com as de Java.

pcalcado

Maurício Linhares:
Vai escrever:

Vai!?? C# nao tem binding dinamico de metodos?!?

Mauricio_Linhares

Tô dizendo que a coisa é bizarra…

Tem que colocar override pra poder “sobrepor” o método da classe pai:

class B: A
   {
     public override void Teste() 
     {
       Console.WriteLine("teste de B");
     }
   }

Quando você “reimplementa” um método numa classe filha e chama usando uma referência pra classe pai, ele chama o método da classe pai, a não ser que você tenha usado esse “override” aí em cima. É estranho, ninguém me disse ainda a utilidade dessa tosqueira, mas é assim né, fazer o que… :roll:

As vezes, quando você “sobrepõe” um método de outra classe sem fazer esse “override” as IDEs dão um aviso, dizendo que o “campo” pode estar escondido (por causa da declaração na classe pai). Em .Net propriedades, métodos e variáveis dentro de objetos são todos “campos”.

fcmartins

Maurício Linhares:
Tô dizendo que a coisa é bizarra…

Tem que colocar override pra poder “sobrepor” o método da classe pai:

class B: A
   {
     public override void Teste() 
     {
       Console.WriteLine("teste de B");
     }
   }

Quando você “reimplementa” um método numa classe filha e chama usando uma referência pra classe pai, ele chama o método da classe pai, a não ser que você tenha usado esse “override” aí em cima. É estranho, ninguém me disse ainda a utilidade dessa tosqueira, mas é assim né, fazer o que… :roll:

As vezes, quando você “sobrepõe” um método de outra classe sem fazer esse “override” as IDEs dão um aviso, dizendo que o “campo” pode estar escondido (por causa da declaração na classe pai). Em .Net propriedades, métodos e variáveis dentro de objetos são todos “campos”.


Em Delphi funciona assim, deve ser coisa do Hejlsberg. O método se comporta como estático/classe sem o ser.

pcalcado

Aff…

Cara, isso e coisa de C++, uma das mais criticadas. Nao acredito que nao corrigiram isso. EU tenho C# como uma linguagem bem razoavel (assim como java), mas isso abalou consideravelmente minha perspectiva :roll:

Queria ver o que o Meyer diria disso…

<editado>Uhhhmmm… que coisa, amterial apra leitura enquanto o sono nao passa e o chefe nao chega</editado>
Shoes

ranophoenix

coisas da Micro$oft :lol:

Gerson

E aí Mauricio, olha, eu ão vejo nada bizarro… ele te dá mais opções apenas.
virtual/não virtual, overriding, hiding com new, etc, etc…
Para quem está acostumado com Java isso pode parecer confuso pq muitas coisas ficam implicitas… por ex, metodos em java sao todos virtuais por default… (claro, tirando static, final)… esse ‘override’ q vc comentou é pq por default ele faz hiding dos metodos…
E em C# vc pode ter mtas combinações desses modificadores…

Mauricio_Linhares

E aí Mauricio, olha, eu ão vejo nada bizarro… ele te dá mais opções apenas.
virtual/não virtual, overriding, hiding com new, etc, etc…
Para quem está acostumado com Java isso pode parecer confuso pq muitas coisas ficam implicitas… por ex, metodos em java sao todos virtuais por default… (claro, tirando static, final)… esse ‘override’ q vc comentou é pq por default ele faz hiding dos metodos…
E em C# vc pode ter mtas combinações desses modificadores…

Me dê um bom uso pra isso, ainda não encontrei.

chicocx

acho apenas que java nao é c#, nem aqui nem na china …

Kleber_Santos

concordo com chicocx

c# != java totalmente,

microsoft ecassss :evil: :evil: :evil:

furutani

Gerson:
ele te dá mais opções apenas.
virtual/não virtual, overriding, hiding com new, etc, etc…
Para quem está acostumado com Java isso pode parecer confuso pq muitas coisas ficam implicitas… por ex, metodos em java sao todos virtuais por default… (claro, tirando static, final)

Só por curiosidade… o que é virtual/não virtual?
e esse hiding com new, o q vem a ser?

Gerson

furutani:
Gerson:
ele te dá mais opções apenas.
virtual/não virtual, overriding, hiding com new, etc, etc…
Para quem está acostumado com Java isso pode parecer confuso pq muitas coisas ficam implicitas… por ex, metodos em java sao todos virtuais por default… (claro, tirando static, final)

Só por curiosidade… o que é virtual/não virtual?
e esse hiding com new, o q vem a ser?

Procure por Virtual Method Invocation, late binding, polimorfismo…

Bom, ‘Hiding’ de um método é vc esconder (!= sobrepor) a versao de um outro método com a mesma assinatura derivada da superclasse.
Em Java, por ex, isso acontece com métodos estáticos, e daí nao existindo overriding, e sim, hiding (ou Shadowing).
Ps.: lembre-se de q em metodos estaticos vc nao tem acesso ao ‘super’, tendo que chamar através de Classe.metodoEstatico().

Criado 7 de junho de 2005
Ultima resposta 21 de jun. de 2005
Respostas 15
Participantes 11