Classes Internas 2

15 respostas
M

pra não perder o rítmo! :grin: qual é o comportamento do código abaixo?

package com.foo;

public class Test2 {

	Test2()
	{
		Other o = new Other() {
				
				void doStuff()
				{
					System.out.println( "Other implementado" );			
				}
				
		};
		
		o.doStuff();

	}
	
	public static void main( String [] args )
	{
		new Test2();
	}

}

interface Other {

	void doStuff();	

}

15 Respostas

F

n compila, pq n pode ter o ; depois do },

mas se tirasse esse ;, o resultado seria “Other implementado”

M

no no… hehea, o “;” é necessário ai, se tu tirar ele, ai sim vai dar erro, mais alguém se habilita?? :slight_smile:

J

Não compila, pq a classe Other é uma interface, e deveria ser implementada, e não instanciada!

deveria estar la em

public class Teste2 implements Other

right?!
espero que sim =)

cya!

F

se o ; ta certo, eu acho q compila e o resultado eh “Other implementado”…

acho q n tem problema nao em ser interface…

M

hehaaeh, todo mundo errado! … hahaeh, jujo, esta sendo implementado, só q é uma classe interna anônima… não tem problema nenhum nisso… mais alguém tenta? :twisted:

V

Compila e executa normalmente.
Saída: Other implementado

A Interface Other é implementada com uma classe interna de método anônima.

É isso mesmo? Não testei…

S

Deve dar erro de compilação, já que métodos de interfaces são implicitamente declarados como públicos, enquanto que na declaração

Test2() 
   { 
      Other o = new Other() { 
             
            void doStuff()

estamos tentando declarar doStuff() como private!!??

B

Olá pessoal!
porque o “;” depois de fechar “new Other() {”

valeu…

M

“spier”:
Deve dar erro de compilação, já que métodos de interfaces são implicitamente declarados como públicos, enquanto que na declaração

Test2() 
   { 
      Other o = new Other() { 
             
            void doStuff()

estamos tentando declarar doStuff() como private!!??

correto! :grin: não compila! … é uma tentativa de diminuir o acesso a visibilidade do método, de public pra default… tudo em uma interface é public implicitamente, Brainn, é preciso o “;” pois não deixa de ser uma instrução de atribuição…!

H

Ok, nem tinha reparado que estava “encurtando” a acessabilidade do método.

Eu não sabia que era possível criar um objeto dessa forma… interface tem construtor? não tem? seria implícito?

M

interfaces não tem construtor… :cool:

D

O default de um método em uma classe eh private enquanto q em uma interface eh public? Eh isso mesmo? … Eu pensava q em ambos era private. :slight_smile:

M

não Davi, o default de um método/variável de instancia em uma classe é default mesmo, hehehe, private é diferente de acesso default, e em interfaces sim, é public implicitamente…

V

Só complementando…

Acesso defaut ou acesso de pacote é quando um atributo, método ou mesmo uma classe é visível apenas pelas classes do mesmo pacote. É um “público apenas para o pacote”. :wink:

F

Boa questão!!!

sempre o compilador irá colocar public abstract em frente aos métodos
de uma interface, mesmo que vc naum coloque! e vc quando faz o overriden do metodo nao pode/deve dimuinuir a visibilidade do metodo da superclass!

Criado 24 de julho de 2004
Ultima resposta 12 de mar. de 2005
Respostas 15
Participantes 9