Classes

Aqui nós vamos aprender o que uma classe pode ter e como escrever uma classe.

O que uma classe pode ter?

Uma classe pode ter

Como escrevemos uma classe?

Por enquanto usaremos somente classes públicas, porém os campos devem ser todos private, então toda classe será feita como abaixo

public class nomeDaClasse{
    // nossos atributos
    private Tipo01 variavel01;
    private Tipo02 variavel02;
    private Tipo03 variavel03;

    // nossos constructors
    public nomeDaClasse(){
        this.variavel01 = new Tipo01();
        this.variavel02 = new Tipo02();
        this.variavel03 = new Tipo03();
    }
    public nomeDaClasse(Tipo01 aVariavel01){
        this(); // Aqui eu estou chamando o constructor desta mesma classe
        this.variavel01 = aVariavel01;
    }
    public nomeDaClasse(Tipo01 aVariavel01, Tipo02 aVariavel02){
        this(aVariavel01); // Aqui eu estou chamando o constructor desta mesma classe
        this.variavel02= aVariavel02;
    }

    // nossos métodos
    public void setVariavel01(Tipo01 aVariavel01){
        this.variavel01 = aVariavel01;
    }
    public Tipo1 getVariavel01(){
        return this.variavel01;
    }

    // Podemos definir métodos que tenham o mesmo nome, isto de chama overloading
    public void metodo01(){
        // coisas que o método 01 faz
    }
    public void metodo01(Tipo aVariavel){
        // coisas que o método 01 faz quando recebe uma variável do tipo "Tipo"
    }
    public void metodo01(Tipo aVariavel, OutroTipo aOutraVariavel){
        // coisas que o método 01 faz quando recebe uma variável do tipo "Tipo", e uma outra variável do tipo "OutroTipo"
    }
    public Tipo04 metodo02(){
        // outro método que retorna um objeto do tipo "Tipo04"
    }
}

Regras para Overloading

Fazer "overload" em um método quer dizer definir um outro método com o mesmo nome, mas com argumentos diferentes.

As regras para fazer "overload" são as seguintes:

Se dois métodos seguem as regras acima, eles podem, ou não, ter:

Modificadores de Acesso

O modificadores que você precisa saber para esta matéria são o public e o private.

Tanto para campos de uma classe, quanto para métodos, as regras são as mesmas:

Além destes dois, temos mais dois modificadores:

Class Package Subclass (mesmo pacote) Subclass (pacote diferente) Mundo
public + + + +
protected + + +
Default + +
private +

Modificador static

Para variável

Uma variável com o modificador static é uma variável que pertence à classe, e não à um objeto da classe.

Isto quer dizer que o valor da variável é sempre o mesmo para todo objeto da mesma classe.
Se uma modificar o valor, este será modificado para todos os outros objetos.

Inclusive, por conveção, acesso à variável deve ser feito através do nome da classe, e não do objeto.

Para métodos

Um método static não poderá ter acesso ao valor das variáveis do objeto, somente às veriáveis static da classe.

Um método static pode criar objetos e poderá ter acesso à qualquer objeto que criou.

Um exemplo de método static é o "main"