Operador new não interage com valor retornado pelo constructor [RESOLVIDO]

2 respostas
D

Buenas pessoal, to precisando de uma esclarecida:

Estava tentando fazer uma “gambiarra” no java, so pra ver se funcionava e acabei “nao entendendo” o pq que aconteceu. Veja o codigo:

class A{
    public int a = 15;
    public B A(){
        return new B();
    }
}
class B{public int a=12;}

public class Main {

    public static void main(String[] args) {
        B a = new A();
        System.out.println(a.b);
    }

}

Isso da erro, e a conclusao a que cheguei, é que o operador new nao aloca espaco na memoria e faz toda aquela “tranqueira” com o valor retornado do constructor e sim ele busca a classe pelo “codigo”. Se ali esta A() ele vai fazer tudo que precisa, buscando pela classe A e nao com o retorno de A(). Acho que é isso, né? Ja assim funcionou:

class A{
    public int a = 15;
    public static B A(){
        return new B();
    }
}
class B{public int a=12;}

public class Main {

    public static void main(String[] args) {
        B a = A.A();
        System.out.println(a.b);//mostra 12
    }

}

Sabem me dizer sobre o new se é isso mesmo que imagino? O new realmente nao interage com valores retornados pelo constructor, né? Ele procura manualmente pela classe que tem o mesmo nome que o constructor e aloca espaco e faz mais um monte de coisas “manualmente”, né?

Abraço

2 Respostas

W

Então cara, na realidade, um construtor tem por definição NUNCA retornar nenhum valor, qd vc fez : public B A(){return new B();} , vc simplesmente criou um método que tem o mesmo nome da sua classe(isso não é legal só pra constar rs).
Construtores não tem retorno, nem void que seria vazio e ainda assim seria um retorno, essa é a questão.

D

entao se eu entendi bem, se eu determinar um tipo de retorno, ele deixa de ser um constructor e passa a ser enchergado como um metodo, é isso?

Edit:
Fui fazer um teste, e é isso mesmo que o colega weberdis falou. Fiz o seguinte exemplo para testar:

class A{  
       public int a;  
       public void A(){  
           this.a = 5;  
       }  
   }  
     
   public class Main {  
     
       public static void main(String[] args) {  
           A a = new A();  
           System.out.println(a.a);//mostra 0 ja que o public void A() nao é o constructor como o colega acima disse e sim um metodo com o mesmo nome da classe.  
       }  
     
  }

Então é isso, muito obrigado!

Criado 20 de abril de 2010
Ultima resposta 20 de abr. de 2010
Respostas 2
Participantes 2