Desafio

25 respostas
J

E ae pessoal… como costume, não vale compilar em…
To vendo… :grin:

Ai vai o código… o que vai imprimir ou vai dar erro e se der, porque.

public class Desafio {
  private String atr1 = "";
  private String atr2 = "";
  private String atr3 = "";
  
  public Desafio(String atr1) {
    this(atr1, atr2, atr3);
  }
  
  public Desafio(String atr1, String atr2, String atr3) {
    super();
    this.atr1 = atr1;
    this.atr2 = atr2;
    this.atr3 = atr3;
  }
  
  public String toString() {
    return this.atr1 + " " + this.atr2 + " " + this.atr3;
  }
  
  public static void main(String[] args) {
    System.out.print(new Desafio("Atributo1").toString());
  }
}

25 Respostas

B

eu diria q não compila…
Tem umas coisas aih q eu não entendi…
quer dizer, acabo de entender, mas não sei se funciona…
O detalhe q me chamou mais a atenção foi a utilização do “super()” q eu não sei pra q pq essa classe não extende nenhuma…
Mas tirando isso, quando vc escreve this(atr1, atr2, atr3); vc esta chamando o construtor de 3 argumentos…
então se isso funcionar e o super não influenciar , vai sair na tela “Atributo1”, pois atr2 e atr3 são vazios…

(acho q to bem em cima do muro)…

J

bah, eu acho que ele vai dar erro kra… nao de compilaçao, mas quando ele for executar, pq ele vai ficar em um loop ali… entre as sobrecargas dos construtores, estou certo???

eh interessante, nunca tinha visto algo assim… eu acho que eh isso ali… mas num sei vou esperar o final da thread pra mim descobrir!

cya!

B

ops…
olhando direitinho(mas não vai fazer diferença), atr2 e atr3 eh espaço em branco e não vazio…

S

Acho que compila normal e a saída é :
"Atributo1 " (sem as aspas)

o this chama o outro construtor da mesma classe e o super chama o construtor da classe Object… (que seria chamado mesmo sem a utilização do super)

To certo ?

C

Acho q a saida é “Atributo1” + " " + " " -> "Atributo1 ".

O atr2 e atr3 estao recebendo “”.

[]'s
Andre

D

Bom, eu acho q compila sem crise, e a saida eh

concordo com o calderan, pois o construtor de um parametro chama o construtor de 3 parametros. No primeiro parametro ele passa “Atributo1” e para os demais: vazio ("").

dai a saida Atributo1

eh isso mesmo JavaTeco!?!

F

Concordo…

Eu programado aqui, nunca usei sobrecarga de metodos, só na teoria, alguem ai ja programou algo e teve que usar essa sobrecarga??? :cry:

Valeu!!

E

“FelipeSS_2”:
Concordo…

Eu programado aqui, nunca usei sobrecarga de metodos, só na teoria, alguem ai ja programou algo e teve que usar essa sobrecarga??? :cry:

Valeu!!

nao sei nao, ta meio estranho mas sobregarga de metodo acho q nao é nao pois em java vc pode sobrecarregalo, so nao pode passar a lista de parametro igual!!!

tentar sobrecarregar um metodo de uma classe com outro metodo tendo a mesma assinatura (nome e parametros) é um erro de sintaxe.

C

:grin: Não compila, existe um erro na linha:

this(atr1, atr2, atr3);

o erro está mais especificamente nas variáveis de instância atr2 e atr3, pois está sendo feito uma referência a atributos da classe Desafio enquanto chama o construtor desta classe. Mas, e aí…

Alguém tem outra idéia? Gostei disso aí :?:

S

verdade… n tinha pensado nisso…
so funcionaria se fossem estáticas…

J

Pessoal… e ai… :wink:

Se tiver o erro e porque desse erro?

F

n tem nenhum erro… e mateus, onde vc viu q vai dar loop???

o resultado vai ser “Atributo1” e mais os espacos q n vao aparecer…

eu jah usei sobrecarga algumas vezes, nunca tive problemas… pelo q eu vi, qndo se cria a instancia (em new Desafio(“Atributo1”)), dai o construtor ( atravez do comando this(atr1, atr2, atr3):wink: chama o outro construtor (o q recebe 3 strings), e em seguida, eh chamado o metodo toString() (q vai retornar “Atributo1” mais os espacos em branco q n vao aparecer)…

e as Strings atr1, atr2 e atr3 n precisao ser estaticas, pois elas estao sendo usadas numa nova instancia para Desafio, e como o construtor n eh um contexto estatico, n ha problema algum…

acertei?

J

Ninguem acertou ainda… tem que justificar… só falar que vai compilar ou não, não é resposta…

Quando alguém acertar eu falo… blz?

Vamos lá… cada hora tá melhor… :joia:

F

se tem algum erro, a unica coisa q me vem na cabeca eh ter usado uma variavel de instancia antes do construtor da superclasse ser executado… mas nem sei se isso da erro…

M

bah… eu nem lembro do capitulo q fala sobre isso no livro da Kathy, nao leio a um tempão… :oops: nao sei dizer sobre esse código, aparentemente parece q compila… mas pelo q o JavaTeco disse, vai dar erro, e de compilação…

J

Posso postar a resposta… ou alguém quer tentar responder? :grin:

J

posta ai… qeu ja tou curioso com isso ai… =)

D

Eu tbm! Naum to conseguindo nem durmir a noite hauahuah

S

Não compila, porque o primeiro construtor faz referência aos atributos 2 e 3, que não são passados como parâmetro, e em Java os atributos só são de fato inicialiados depois do “this”, então quando ele chama o outro construtor, este vai pedir os atributos 2 e 3 que não forma passados como parâmetros, e vai dar erro!

J

É quase isso… mas tb está errado. Regra em Java: os atributos que não são estáticos só podem ser acessados depois que o construtor da super classe tenha sido excecutado (e não o “this” como vc falou). Mas esse é o caminho. Irrá dar erro de compilação, mas porque.

Porque a chamada this(atr1, atr2, atr3); está fazendo referência aos atribuitos com espoco de classe atr2 e atr3, sendo que o construtor da superclasse ainda não foi chamado, como pode ser visto no construtor com argumentos.

Agora, como eu vi como em outro post, que colocando os atributos como estáticos irá compilar… Tá certo, pois assim o atributos passam a “existir”, sem a classe seja instânciada e consequentemente podem ser acessados, mesmo que o construtor da superclasse não seja chamado.

Mas isso não foi a pergunta… não foi pedido um solução e sim o porque do problema.

O que falou sem ter certeza e acertou foi o Felipe:

:wink: :wink: :wink: :wink: :wink: :wink: :wink:

J

Kra explendida essa questão… poem mais dessas ai =) adorooo essas questoes!

valew JavaTeco =)

cya!

M

bah… ta doido, essa ai matou a pau, nao lembro de ter visto nada igual no livro da kathy, nem mesmo essa regra… 8O

D

Nem eu matheus,… fiquei de cara…

B

se ao inves de

eu colocar

porque da erro??

T+

J

Pq nessa classe não tem um construtor que aceite somente um atributo String como parâmetro.

Só se vc criar um construtor que aceite… tenta criar um e vc verá que não vai acusar erro… blz?

Criado 18 de junho de 2004
Ultima resposta 22 de jun. de 2004
Respostas 25
Participantes 13