Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

construtor sem parametro

class B { 
    protected String s = "a";
    protected B() {}
    static A B(String s) {
        return new A(s);
    }
}
class A extends B {
    A(String s) {
        this.s = s;
    }
    public static void main(String[] args) {
        A b = A.B("t");
        System.out.println(b.s);
    }
}

amigos, na linha A b = A.B("t"); estaria chamando o construtor B que a classe A herdou? estou em duvida porque chama o construtor como se fosse um metodo e ainda por cima passa um parametro, sendo que o construtor B que a classe A herdou nao possui parametro. pode isso Arnaldo?

1 resposta
solução!

Confuso né Vitor kkkkkkk

Vamos lá... quando se usa herança sempre deve ser executado o construtor da classe pai, seria como se tivesse um super() no construtor da classe A:

class B {
    protected String s = "a";

    protected B() {
        System.out.println("Construtor B sem parâmetro");
    }

    static A B(String s) {
        return new A(s);
    }
}

class A extends B {
    A(String s) {
        super();
        this.s = s;
    }
    public static void main(String[] args) {
        A b = A.B("t");
        System.out.println(b.s);
    }
}

Como não há parâmetro nesse construtor, não se faz necessário a chamada do super(), por padrão o compilador irá chamar o construtor padrão, se o construtor da classe pai tivesse algum parâmetro haveria um erro na compilação

class B {
    protected String s = "a";

    protected B(int i) {
        System.out.println("Construtor B sem parâmetro");
    }

    static A B(String s) {
        return new A(s);
    }
}

class A extends B {
    A(String s) {
        super();
        this.s = s;
    }
    public static void main(String[] args) {
        A b = A.B("t");
        System.out.println(b.s);
    }
}

Erro: There is no default constructor available in 'com.company.B'