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

CAIXA pode ser Estática

Na primeira alternativa temos como afirmação verdadeira:

Correto, CAIXAé uma atributo da instância, pois usamos a referência c para acessar o atributo. Se fosse estático a chamada seria:

Conta.CAIXA.getCodigo();

Entretanto CAIXA não é necessariamente apenas um atributo da instancia, ela pode ser uma variável estática, prova disso é que como mostrado no código a seguir é possível alterar o valor retornado na classe estática utilizando a referencia presente na instancia:

class Caixa {

    public static String codigo = "Meu código";

    public static String getCodigo() {
        System.out.println(codigo);
        return codigo;
    }

}

public class Conta {

    public static Caixa CAIXA = new Caixa();

    public static void main(String[] args) {
        Conta c = new Conta();
        c.CAIXA.getCodigo();
        c.CAIXA.codigo = "Meu Novo Código!";
        Conta.CAIXA.getCodigo();
        Caixa.getCodigo();
    }

}

Sendo assim a alternativa não está errada, mas poderia estar sendo mais clara em sua explicação, sobre o que se refere ao falar Se fosse estático e ao usar o método Conta.CAIXA.getCodigo(). Mas claro, se eu tiver entendido errado e estiver falando groselha, por favor me corrijam. xD

1 resposta
solução!

Wensttay,

É um ótimo questionamento, o que eu posso entender sobre isso é que o exercício quer ensinar o *conceito * de membros de instância e membros de classe (estáticos).

De fato o seu código funciona, você consegue acessar uma variável estática a partir de uma instância, mas isso me parece mais uma facilidade do Java. No C#, por exemplo, esse código não é possível porque conceitualmente um membro de classe não é possível ser acessível pela instância.

Portanto, para o paradigma de Orientação a Objetos de qualquer linguagem a alternativa estaria errada, entretanto, para o Java (e outras linguagens que permitem esse acesso) o código roda.

Olha um exemplo em C#

namespace ConsoleApp1
{
    public class Caixa
    {
        public static String codigo = "Meu código";

        public static String getCodigo()
        {
            return codigo;
        }
    }

    class Conta
    {
        public static Caixa CAIXA = new Caixa();

        static void Main(string[] args)
        {
            Conta c = new Conta();
            //c.CAIXA.getCodigo();  -- Member 'Conta.CAIXA' cannot be accessed with on instance reference; quality it with a type name instead
            //Conta.CAIXA.getCodigo(); --Member 'Conta.getCodigo()' cannot be accessed with on instance reference; quality it with a type name instead
            Caixa.codigo = "Meu novo código!";
            Caixa.getCodigo();
        }
    }
}

Os códigos comentados dão erro de compilação e o .Net é bem específico em relação ao erro, diz que os membros estáticos não podem ser acessados pela instância.

Acredito que apesar do conceito estar presente no Java, a linguagem dá um recurso de facilidade de acesso mas não que isso mude o conceito geral.

Esse é o meu entendimento.

Espero ter ajudado.

Abraço