Classes Internas 2

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

[code]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();	

}[/code]

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

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

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

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!

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

acho q n tem problema nao em ser interface…

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:

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…

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!!??

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

valeu…

[quote=“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!!??[/quote]

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…!

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?

interfaces não tem construtor… :cool:

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:

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…

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:

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!