metodos staticos  XML
Índice dos Fóruns » Certificação Java
Autor Mensagem
cu_ringa
Virtual Machine Man
[Avatar]

Membro desde: 27/08/2003 00:19:11
Mensagens: 602
Localização: Natal-RN
Offline

no final da pag 85 do livro SCJP(portugues) da kathy sierra ela fala q metodos estaticos não podem ser sobrecarregados. mas podem ser redefinidos. bem eu fiz esse codigo e ele deu certo. Nesse exemplo tanto o metodo A é subscrito como sobrecarregado. Ou estou errado?



qm tiver o livro e poder da uma olhadinha p me ajudar eu agradeço.

"O que levamos desta vida, é a vida que a gente leva".
LPJava
GUJ Hacker

Membro desde: 18/04/2006 12:50:23
Mensagens: 5524
Localização: Bahia/Porto Alegre
Offline

bom n to com livro agora mais acho q ela fala que nao pode ser sobrecarreado por um metodo nao static nao é isso nao? pq ai vc tem um subscrito e um metodo sobrecarregado!! e lembre-se static so pode chamar static!! mais vou olhar a pg.. e posto novamente..

Sun Certified Java Programmer 5.0
Blog:http://www.camilolopes.com
Twitter:www.twitter.com/camilolope
Linkedin: http://br.linkedin.com/in/camilolopes
Curso online OCPJP: http://pro.imasters.com.br/online/cursos/preparatorio-para-certificacao-java-ocjp
Autor livro Guia SCJP & JEE c/ Frameworks: http://blog.camilolopes.com.br/livrosrevistaspalestras/
[WWW]
fernandoinfo
Smalltalk

Membro desde: 15/09/2006 17:54:27
Mensagens: 1
Offline

A problema é que o método:

public static void A(int i){
System.out.println("B");
}

Não esta sendo sobrecarregado ele é simplesmente um novo metodo criado
na classe B.
absolution
Debugger

Membro desde: 31/03/2006 11:32:15
Mensagens: 73
Offline



A mesma coisa eh para o metodo A() sem argumentos. Se vc fizer o seguinte:



sera impresso "A" duas vezes! Isso pq metodos static sao definidos em tempo de compilacao e nao sao sobrescritos!

se o metodo A() nao fosse static a resposta mudaria para:

A
B

ae galera! espero ter ajudado!

oalexandrino
Thread.start()

Membro desde: 08/08/2005 09:20:24
Mensagens: 45
Localização: Recife - PE
Offline

Sobre sobrecargas de métodos estaticos prestem atençao!

As AFIRMATIVAS ao redor do exame:

1) Métodos estáticos NÃO podem ser sobrecarregados!

Quando você tem um método estatico na subclasse que tem a mesma assinatura de um método estatico na classe Super ele NÃO é uma sobrecarga, o que ele faz é OCULTAR o método da super!

Não estou estudando em portugues, assim to enviando várias regras, em Ingles, sobre esse assunto que pega muita gente!

about overriding !


1) A static method of a subclass hides--but does not override--an accessible superclass method with the same signature;

2) A compile-time error is generated if a subclass contains a declaration of an instance method that shares the same signature as an accessible static method of the superclass;

3) A subclass can override a concrete implementation of a method with an abstract method declaration;

4) The modifiers, synchronized, native and strictfp, specify implementation details that the programmer is free to change in a subclass.

- If a superclass method is synchronized, then the overriding method may or not be synchronized;
- If a superclass method is native, then the overriding method may or not be native;
- If a superclass method is strictfp, then the overriding method may or not be strictfp;

5) A subclass method may not have weaker access than the overridden superclass method;

6) A subclass method can provide greater access than a superclass method;

Olavo Alexandrino
MCP / SCJP 5.0
[Email]
Paulo Silveira
Administrador
[Avatar]

Membro desde: 07/08/2002 18:38:50
Mensagens: 4204
Localização: São Paulo
Online

cuidado: voces estao errando os termos sobrecarregado e sobrescrito


sobrecarrego é overload e sobrescrito é override! voces estao falando o contrario!

metodos estaticos PODEM ser overloaded, mas nao ha sentido em falar de override de metodos estaticos (ja que nao ha uma instancia para poder falar em invocacao virtual de metodo)

http://blog.caelum.com.br twitter: @paulo_caelum


[Email] [WWW]
mister__m
Virtual Machine Man
[Avatar]

Membro desde: 18/03/2005 16:13:17
Mensagens: 736
Offline

Paulo Silveira wrote:metodos estaticos PODEM ser overloaded, mas nao ha sentido em falar de override de metodos estaticos (ja que nao ha uma instancia para poder falar em invocacao virtual de metodo)


Ou pondo de outra forma: overriding/sobrescrita tem a ver com polimorfismo e polimorfismo soh existe com instancias.

Michael Nascimento Santos, aka Mister M

Summa Technologies do Brasil - http://www.summa-tech.com/
genesis: Uma nova forma de desenvolver aplicações - https://genesis.dev.java.net/
ThinNB: Suporte a Thinlet no NetBeans - https://thinnb.dev.java.net/
Líder da JSR-310 - Date and Time API
Expert Group Member das JSRs 207 (PD4J), 250 (Common Annotations), 270 (Java 2 SE 6.0), 296 (Swing Framework) e 303 (Bean Validation)
SouJava: Fortalecendo a comunidade Java brasileira - https://soujava.dev.java.net/ https://www.soujava.org.br/
JSR Community @ java.net - http://community.java.net/jsr
Blogs - http://blog.michaelnascimento.com.br/ http://today.java.net/pub/au/80
Twitter - @mr__m
[WWW]
oalexandrino
Thread.start()

Membro desde: 08/08/2005 09:20:24
Mensagens: 45
Localização: Recife - PE
Offline

Paulo Silveira wrote:cuidado: voces estao errando os termos sobrecarregado e sobrescrito


sobrecarrego é overload e sobrescrito é override! voces estao falando o contrario!

metodos estaticos PODEM ser overloaded, mas nao ha sentido em falar de override de metodos estaticos (ja que nao ha uma instancia para poder falar em invocacao virtual de metodo)


De fato!

Corrigindo

1) Métodos estáticos NÃO podem ser SOBRESCRITOS!

Quando você tem um método estatico na subclasse que tem a mesma assinatura de um método estatico na classe Super ele NÃO é um OVERRIDEN, o que ele faz é OCULTAR o método da super!

Olavo Alexandrino
MCP / SCJP 5.0
[Email]
jaboot
Virtual Machine Man

Membro desde: 01/07/2005 14:25:37
Mensagens: 749
Localização: São Paulo
Offline

oalexandrino wrote:Quando você tem um método estatico na subclasse que tem a mesma assinatura de um método estatico na classe Super ele NÃO é um OVERRIDEN, o que ele faz é OCULTAR o método da super!

Então a resposta para esta questão é "AB" ?
[MSN] [ICQ]
oalexandrino
Thread.start()

Membro desde: 08/08/2005 09:20:24
Mensagens: 45
Localização: Recife - PE
Offline

SIM!

Mas se quiser fazer mais testes

Troque o codigo do construtor por esse:



Voce verá, na ultima instanciacao, que o metodo chamado SEMPRE sera o da classe A, diferentemente se os metodos fossem metodos de instancia ao inves de estaticos.

Olavo Alexandrino
MCP / SCJP 5.0
[Email]
 
Índice dos Fóruns » Certificação Java
Ir para:   
Powered by JForum 2.1.8 © JForum Team