Estou estudando para certificacao e estou com uma duvida…
Essa linha não está instanciando a InnerTest class ?? Pergunto isso pois essa classe eh abstrata e classes abastratas nao podem ser instanciadas.
Test.InnerTest test=t.new InnerTest()…
Segue codigo completo abaixo.
Alguem pode me explicar melhor o que essa linha esta fazendo ??
abraco,
Dac
import java.util.*
public class Test
{
public abstract class InnerTest
{
abstract void f();
}
public stati void main (String[] args)
{
Test t = new Test();
Test.InnerTest test=t.new InnerTest()
{
public void f();
{
System.out.println(“Inner f”);
}
};
}
Isso nao eh instanciacao pq ele ta definindo como se fosse um metodo…alguem EXPERT pra me ajudar…isso eh pegadinha de certificacao…
Eu acho que o trecho acima eh diferente de :
Test t = new InnerTest(); //ISSO eh proibido…mas nao entendi o que ele ta fazendo no trecho cima…
public class Test {
public abstract class InnerTest {
abstract void f();
}
public static void main(String[] args) {
Test t = new Test();
/*
*
* Trata-se de uma classe abstrata interna anônima,
* Classe interna se instancia deste jeito, como é abstrata
* é uma instancia anônima, pesquise sobre classes anônimas
* falow, cara!
* */
Test.InnerTest test=t.new InnerTest() {
public void f(){
System.out.println("Inner f");
}
};
//para imprimir o texto
test.f();
}
}
Eh abstrata só que vc fez uma implementacao anônima ao invés da implementação tradicional, e faltou chamar o método f() que foi sobrescrito pela tua classe ao usar o new . Sem mudar o conceito q uma classe abstrata nunca poderá ser instanciada. vc fez a implementação dessa classe sem dar nome a ela por isso são chamadas anônimas.
Se eu perguntei é porque li e ainda fiquei com algumas duvida. As vezes precisamos entender do nosso jeito e precisamos de confirmações para estabelecer os fundamentos.
Nao quase nada de Java mas estou tentando aprender, e nao gostei nada da sua resposta.
[quote=edancam]Se eu perguntei é porque li e ainda fiquei com algumas duvida. As vezes precisamos entender do nosso jeito e precisamos de confirmações para estabelecer os fundamentos.
Nao quase nada de Java mas estou tentando aprender, e nao gostei nada da sua resposta.
[/quote]
Desculpe.
Normalmente o pessoal faz uma pergunta mais específica, como “eu não entendi esse trecho da explicação” ou “isso ainda não ficou claro”.
Você simplesmente repetiu a pergunta, por isso, entendi que você sequer tinha aberto o conteúdo do link.
Eu sei que, via de regra, poucos abrem links e menos ainda se dão ao trabalho de ler quando o texto deles é tão grande.
Mas havia explicado recentemente sua dúvida, com muitos detalhes, pois ela é recorrente no fórum.
Concordo, é difícil obter uma boa resposta se não faz uma boa pergunta. Aliás, esta é uma das piores perguntas que já vi até agora no GUJ.
Ainda, não adianta ficar com tiradas do tipo alguém “EXPERT” pode ajudar, pois o colega nada mais tentou do que ajudar você e você complica com falta de paciência.
Vamos ao que interessa:
Repetiram N vezes que isso é uma criação de classe anônima. InnerTest é abstrata com certeza, por isso ao construir com NEW, você vê CLARAMENTE que a classe está sendo programada para ficar concreta e sua especialização não tem nome, por isso é ANÔNIMA.
Não é só isso, quando o runtime executar esta linha, vai fazer o de sempre: criar um endereço para a variável “Test.InnerTest test” e reservar um espaço na memória para comportar o objeto produzido pelo NEW que tem na sua frente a implementação de uma classe ANÔNIMA derivada de InnerTest.
Existem muitas técnicas em um só comando.
Se não ficou claro, recomendo você investir bastante em conhecer fundamento da computação antes de lidar com certificação de Java.