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 ???
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);
}
}
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.
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);
}
}
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);
}
}
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);
}
}
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.
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);
}
}
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
}