Dúvidas sobre encapsulamento, modificadores de acesso e composição

5 respostas
java
Leo_Magalhaes

Esse código compila? Estou usando o compilejava.net pois estou em um ambiente onde não posso instalar nada. Não consigo achar o erro, e já percebi que esse compilador online tem certas “peculiaridades”.

public class MyClass {
    private int param;
    
    public void MyClass(int i) {
        this.param = i;
    }
    public int getParam() {
         return param;
    }
}

public class MyCompClass {
    MyClass myObj;
    public void MyCompClass() {
          int i = 1234;
        myObj = new MyClass(i);
    }
    public void setValue(int i) {
        myObj = new MyClass(i);
    }
}

public class MeuPrograma { 

    public static void main(String[] args) {
    MyCompClass teste = new MyCompClass();
    System.out.println("O valor do parametro e " + teste.myObj.getParam());
    teste.setValue(0);
    System.out.println("O valor do parametro e " + teste.myObj.getParam());
    }
}

Ele retorna o seguinte erro:

/tmp/java_Cdo9Nm/MyCompClass.java:5: error: constructor MyClass in class MyClass cannot be applied to given types;

myObj = new MyClass(i);

^

required: no arguments

found: int

reason: actual and formal argument lists differ in length

O que não fez o menor sentido para mim. Estou estudando pela apostila Caelum ao mesmo tempo em que desenvolvo um aplicativo, queria entender isso para poder fazer um software bem feito.

5 Respostas

staroski

Você está tentando instancias sua classe MyClass dessa forma:

int i = 1234;
myObj = new MyClass(i);

Isso gera um erro de compilação pois sua classe MyClass não possui um construtor com parâmetro do tipo int.

O que você declarou na classe não é um construtor, é só um método com retorno do tipo void e nome igual ao da classe.

Leo_Magalhaes

obrigado!

peczenyj

isso alias é um erro bem comum.

pra evitar, siga a convenção de: classe começando com letra maiuscula, metodo começando com letra minuscula.

assim quando vc ver

public void MinhaClasse

seu cérebro avisa : opa construtor não se declara assim

Leo_Magalhaes

eu estava segundo a convenção, mas meu cérebro ainda precisa treinar mais… Foi um erro bobo, eu mesmo poderia ter descoberto, agradeço muito a boa vontade dos usuários do forum.

peczenyj

relaxa que isso acontece com todo o mundo

Criado 14 de novembro de 2016
Ultima resposta 14 de nov. de 2016
Respostas 5
Participantes 3