Dúvida com essa Questão

olá Pessoal,

Esta fazendo um Mock’s ontem e deparei com a seguinte Questão

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

    test() {
       test(2);
    }

    test(int z) {
       System.out.println(z);
    }
}

Eu fui seco achando q a resposta era printar o resultado 2 … pois a resposta certa é não compila
Abri o netbeans pra ver c era verdade… e realmente naum compilou…dando “cannot find symbol”

Mas como isso ???
Juro q naum entendi nada…como ele naum encontra ??? pq naum compila ???

Esclareçam essa dúvida pra mim

Obrigado

Ricardo

putz não entendi nada. Tenta instanciar a sobrecarga depois do test() (heeeim?!)… :

public class test {   
    public static void main(String[] args) {   
       //new test();
test teste = new test();   
    }   
  
    test() {   
test testeint = new text(int num=2);
       //test(2);   
    }   
  
    test(int z) {   
       System.out.println(z);   
    }   
}  

Esse trecho:

 test() {  
        test(2);  
     }  

tem que ser assim:

 test() {  
        this(2);  //chamada para o construtor sobrecarregado com parametro int
     }  

obrigado ao pessoal pela respostas,

Mas o nome do construtor ja naum daria certo ???

pq this(2); ??? o test(2); naum seria o mesmo resultado ??

Muito Obrigado

Ricardo

Não não…

Dentro do construtor o objeto ainda não está criado

vc poderia ter feito algo assim:

        test() {
           new test(2);
        }  

Algo totalmente sem sentido, mas compila. Você estaria criando um novo objeto test dentro do contrutor da propria classe test :shock:

olá g4j,

Mais uma vez obrigado por esclarecer minha dúvida…é…tem razão … o objeto naum foi criado ainda…o correto era usar o this

Obrigado…vou estudar isso…daki uns meses vou fazer a prova SCJP

Ricardo

O construtor é um método que é acessado quando instanciamos um objeto.
Para usar outro construtor dentro de qualquer outro, você deve usar a sobrecarga com o this que referencia a classe e obviamente o seu(s) respectivo(s) construtores.
Isso existe porque você não pode ter dois construtores com a mesma assinatura.
Esse é o padrão.

Abs,

pra vc estudar mais um pouquinho sobre os construtores…tente acertar a saída desse programa:

public class Teste{

    
    Teste(){
	super();
	System.out.println("construtor padrão");
    }

    Teste(Integer um){
	this();
	System.out.println("construtor com um argumento");
    }
    
    Teste(Integer um,Integer dois){
	this(um);
	System.out.println("construtor com dois argumentos");
    }
    
    public static void main(String[] args) {
	new Teste(1,2);
    }
}

olá pra galera,

Obrigado pelo monte de ajuda e até um teste…kkkkkkkkk

bom…pelo oq eu estudei até agora…e meu cerébro compilador permite executar é

Output:

construtor padrão
construtor com argumento
construtor com dois argumentos

ta certo ??

Ricardo

sim senhor…está correto. Construtores dá uma certa dor de cabeça se não prestar atenção…estude as possíveis maneiras de construir um objeto sem erros…

public class Teste{

    
      Teste(Integer um){
	this();
	System.out.println("construtor com um argumento");
    }
    
    Teste(Integer um,Integer dois){
	this(um);
	System.out.println("construtor com dois argumentos");
    }
    
    public static void main(String[] args) {
	new Teste(1,2);
    }
}

Se alterarmos já não funciona mais…

olá,

ah sim…naum tem o construtor sem argumentos dai daria erro de compilação…a se as questões da prova fosse desse nível

eu axo q me daria bem…eu axo !!!

kkkkkkkkkkkkk

um abraço e parabens à comunidade …prontificou a me ajudar em poucos minutos

Abraço e t+

Ricardo

Aí pessoal, o burrico da turma aqui não entendeu :oops: , alguém poderia me explicar…
Para mim o resultado seria: construtor padrão.

Desde já, muito obrigado !

olá cara,

Se for assim eu tb sou, pq eu naum sabia.

Mas é o seguinte … naum pode chamar um construtor de dentro de outro construtor com o nome da classe …vc só pode através da palavra-chave this().

é isso…

Relebrando: Nunca chame um método construtor de dentro de outro construtor somente pelo nome…só referencia com a palavra this.

QQ dúvida é só postar

Ricardo

Ola pessoal, bom dia!

Tenho uma dúvida quanto a chamada do super no código abaixo, não esta errado?, ou seja, quando utilizo o super estou invocando a construtor da minha classe pai, correto?

public class Teste{   
  
       
    Teste(){   
    super();   
    System.out.println("construtor padrão");   
    }   
  
    Teste(Integer um){   
    this();   
    System.out.println("construtor com um argumento");   
    }   
       
    Teste(Integer um,Integer dois){   
    this(um);   
    System.out.println("construtor com dois argumentos");   
    }   
       
    public static void main(String[] args) {   
    new Teste(1,2);   
    }   
}  

Agradeço as explicações, obrigado!

olá Rodrigo,

sim…a chamada super() está relacionado a classe PAI.

Ali no código ele vai chamar o PAI da classe Teste … q é a classe OBJECT …

ali simplesmente ta explicito a chamada super() … caso ele naum colocasse o compilador insere para vc implicitamente.
Debaixo de todo método construtor, caso vc naum coloke, o compilador coloca o super() pra vc.

Lembrando que se colocar super() naum pode colocar this() ou vice-versa.

Ricardo

ricardo13, esta parte eu entendi, o que eu não entendi foi a resposta da questão que o Giulliano passou…

Muito obrigado !!

olá,

mas qual dos exemplos … o 1º ou o 2º ???

Ricardo

Segue abaixo:


public class Teste{

    
    Teste(){
	super();
	System.out.println("construtor padrão");
    }

    Teste(Integer um){
	this();
	System.out.println("construtor com um argumento");
    }
    
    Teste(Integer um,Integer dois){
	this(um);
	System.out.println("construtor com dois argumentos");
    }
    
    public static void main(String[] args) {
	new Teste(1,2);
    }
}

olá

A sequencia da execução do programa é dado na frente de cada linha de código:

public class Teste{

Teste(){   
super();                                                                            //4 -> como o pai de Teste é a classe Object  
System.out.println("construtor padrão");                              //5
}   

Teste(Integer um){   
this();                                                                               //3
System.out.println("construtor com um argumento");            //6
}   
   
Teste(Integer um,Integer dois){   
this(um);                                                                           //2
System.out.println("construtor com dois argumentos");         //7
}   
   
public static void main(String[] args) {   
new Teste(1,2);                                                                  //1
}   

}

Entendeu ??? qq coisa é só postar

Ricardo

Ah sim. Legal.

Vlw Ricardo!!! Obrigado pela explicação.

Abs,