Curso de Orientação a Objeto Java

Teoria

1 - Bola

Arquivo: Bola.java
// Bola.java
public class Bola {
   // Atributos
   public float raio;
   public boolean oca;
   public int material;
   public String cor;
}

/*
Bola
(from default)
--------------
cor
material
oca
raio
*/

/*
Bola
(from default)
--------------
cor: String
materia: int
oca: boolean
raio: float
*/

/*
Bola
(from default)
--------------
+ cor: String
+ materia: int
+ oca: boolean
+ raio: float
*/
Arquivo: testando_a_bola.java
// testando_a_bola.java

public class testando_a_bola {
   public static void main (String args[]){
      // Instanciando um objeto
      Bola bolaDoJoao = new Bola();
      // Armazenando Valores em algum dos atributos deste objeto
      bolaDoJoao.raio = 0.34f;
      bolaDoJoao.oca = false;
      bolaDoJoao.cor = "Branco";

      // Instanciando um outro objeto
      Bola minhaBola = new Bola();

      // Armazenando Valores em algum dos atributos deste objeto
      minhaBola.oca = true;
      minhaBola.material = 1324;

      // Usando valores de outro objeto
      minhaBola.raio = 5 * bolaDoJoao.raio;
      minhaBola.cor = bolaDoJoao.cor;


// ==============================================
//
// ==============================================
      System.out.println("Bola do Joao");
      System.out.println("   raio = " + bolaDoJoao.raio);
      System.out.println("   oca  = " + bolaDoJoao.oca);
      System.out.println("   cor  = " + bolaDoJoao.cor);

      System.out.println("Minha Bola");
      System.out.println("   raio = " + minhaBola.raio);
      System.out.println("   oca  = " + minhaBola.oca);
      System.out.println("   cor  = " + minhaBola.cor);

// ==============================================
//
// ==============================================
     int BolaA = 7, BolaB;
     bolaDoJoao.raio = BolaA;
     BolaB = minhaBola.material;
     bolaDoJoao.material = BolaB;
     minhaBola.raio = bolaDoJoao.raio + 3;

     if(minhaBola.raio == 10)
          System.out.println("Bola de Futebol");

// ==============================================
   }
}
/*
Resultado:
Bola do Joao
   raio = 0.34
   oca  = false
   cor  = Branco
Minha Bola
   raio = 1.7
   oca  = true
   cor  = Branco
Bola de Futebol
*/

2 - Lampada

Arquivo: Lampada.java
// Lampada.java

// Classe Lampada

public class Lampada {
   // atributos
   public boolean acesa;

   // metodos
   public void ligar() {
      acesa = true;
   }
   public void desligar() {
      acesa = false;
   }
}
/*
Lampada
(from default)
--------------
+ acesa boolean
--------------
+ desligar()
+ ligar()
*/
Arquivo: testando_a_lampada.java
// testando_a_lampada.java

public class testando_a_lampada {
   public static void main (String args[]){

      Lampada lamp = new Lampada();

      lamp.ligar();
      System.out.println("Lampada Criada (Acesa = " + lamp.acesa + ")");
      lamp.desligar();
      System.out.println("Lampada Criada (Acesa = " + lamp.acesa + ")");
   }
}
/*
Resultado:
Lampada Criada (Acesa = true)
Lampada Criada (Acesa = false)
*/

3 - Liquidificador Analógico

Arquivo: Liquidificador.java
// Liquidificador.java

public class LiquidificadorAnalogico {
   // atributos
   private int velocidade;

   // metodos
   public void aumentarVelocidade() {
      switch (velocidade) {
         case 0:
            // se desligado passa para velocidade baixa
            velocidade++;
            break;
         case 1:
            // se velocidade baixa passa para velocidade alta
            velocidade++;
            break;
            // se velocidade alta não vaz nada (manter velocidade)
      }
   }

   public void diminuirVelocidade(){
      switch (velocidade){
         case 1:
            // se velocidade baixa passa para desligado
            velocidade--;
            break;
         case 2:
            // se velocidade alta passa para velocidade baixa
            velocidade--;
            break;
            // se desligado não faz nada
      }
   }

   public int obterVelocidade(){
      return velocidade;
   }
}
/*
Liquidificador
Aumentando velocidade...
Velocidade atual = 1
Aumentando velocidade...
Velocidade atual = 2
Aumentando velocidade...
Velocidade atual = 2
Aumentando velocidade...
Velocidade atual = 2
Aumentando velocidade...
Velocidade atual = 2
Diminuindo velocidade...
Velocidade atual = 1
Diminuindo velocidade...
Velocidade atual = 0
Diminuindo velocidade...
Velocidade atual = 0
Diminuindo velocidade...
Velocidade atual = 0
Diminuindo velocidade...
Velocidade atual = 0
*/
Arquivo: testando_o_liquidificador_analogico.java
// testando_o_liquidificador_analogico.java

public class testando_o_liquidificador_analogico {
   public static void main(String args[]) {
      LiquidificadorAnalogico l = new LiquidificadorAnalogico();
      System.out.println("Liquidificador");
      for(int v=0; v<5; v++){
         System.out.println("Aumentando velocidade...");
         l.aumentarVelocidade();
         System.out.println("Velocidade atual = " + l.obterVelocidade());
      }
      for(int v=0; v<5; v++){
         System.out.println("Diminuindo velocidade...");
         l.diminuirVelocidade();
         System.out.println("Velocidade atual = " + l.obterVelocidade());
      }
   }
}
/*
Resultado:
Liquidificador
Aumentando velocidade...
Velocidade atual = 1
Aumentando velocidade...
Velocidade atual = 2
Aumentando velocidade...
Velocidade atual = 2
Aumentando velocidade...
Velocidade atual = 2
Aumentando velocidade...
Velocidade atual = 2
Diminuindo velocidade...
Velocidade atual = 1
Diminuindo velocidade...
Velocidade atual = 0
Diminuindo velocidade...
Velocidade atual = 0
Diminuindo velocidade...
Velocidade atual = 0
Diminuindo velocidade...
Velocidade atual = 0
*/

4 - Liquidificador Digital

Arquivo:  LiquidificadorDigital.java
// LiquidificadorDigital.java

public class LiquidificadorDigital {
   // atributos
   protected int velocidade;

   // métodos
   public void trocarVelocidade(int v) {
      if (v>=0 && v<=2) {
         velocidade = v;
      }
   }
   public int obterVelocidade(){
      return velocidade;
   }
}
/*
LiquidificadorDigital
(from default)
--------------
# velocidade: int
--------------
+obterVelocidade(): int
+trocarVelocidade(int)
*/
Arquivo: testando_o_liquidificador_digital.java
// testando_o_liquidificador_digital.java

public class testando_o_liquidificador_digital {
   public static void main(String args[]) {
      LiquidificadorDigital l = new LiquidificadorDigital();
      System.out.println("Liquidificador");
      for(int v=0; v<5; v++){
         System.out.println("Aumentando velocidade...");
         l.trocarVelocidade(v);
         System.out.println("Velocidade atual = " + l.obterVelocidade());
      }
      for(int v=5; v>=0; v--){
         System.out.println("Diminuindo velocidade...");
         l.trocarVelocidade(v);
         System.out.println("Velocidade atual = " + l.obterVelocidade());
      }
   }
}
/*
Liquidificador
Aumentando velocidade...
Velocidade atual = 0
Aumentando velocidade...
Velocidade atual = 1
Aumentando velocidade...
Velocidade atual = 2
Aumentando velocidade...
Velocidade atual = 2
Aumentando velocidade...
Velocidade atual = 2
Diminuindo velocidade...
Velocidade atual = 2
Diminuindo velocidade...
Velocidade atual = 2
Diminuindo velocidade...
Velocidade atual = 2
Diminuindo velocidade...
Velocidade atual = 2
Diminuindo velocidade...
Velocidade atual = 1
Diminuindo velocidade...
Velocidade atual = 0
*/

5-Usando o metodo get e set

Arquivo: PontoGeografico.java
// PontoGeografico.java
public class PontoGeografico {
   private float latitude;
   private float longitude;

   public PontoGeografico(){
      latitude = 0;
      longitude = 0;
   }

   public float getLatitude(){
      return latitude;
   }
   public void setLatitude(float l){
      latitude = l;
   }
   public float getLongitude(){
      return longitude;
   }
   public void setLongitude(float l){
      longitude = l;
   }
}
Arquivo: testando_o_ponto_geografico.java
public class testando_o_ponto_geografico {
   public static void main(String args[]){
      PontoGeografico g = new PontoGeografico();

      System.out.println("Ponto inicial");
      System.out.println("Latitude:  " + g.getLatitude());
      System.out.println("Longitude: " + g.getLongitude());

      g.setLatitude(10);
      g.setLongitude(20);

      System.out.println("Ponto final");
      System.out.println("Latitude:  " + g.getLatitude());
      System.out.println("Longitude: " + g.getLongitude());
   }
}
/*
Resultado:
Ponto inicial
Latitude:  0.0
Longitude: 0.0
Ponto final
Latitude:  10.0
Longitude: 20.0
*/

6 - Sobrecarga de construtores

Arquivo: Sobrecarga_de_construtores.java
// Sobrecarga_de_construtores.java

public class Sobrecarga_de_construtores {
   // atrubutos
   public int prim;
   public int sec;

   public Sobrecarga_de_construtores(){
      prim = 0;
      sec = 0;
   }

   public Sobrecarga_de_construtores(int p) {
      prim = p;
      sec = 0;
   }

   public Sobrecarga_de_construtores(int p, int s) {
      prim = p;
      sec = s;
   }
}
Arquivo: Testando_sobrecarga_de_construtores.java
// Testando_sobrecarga_de_construtores.java

public class Testando_sobrecarga_de_construtores {
   public static void main(String args[]){
      // Exemplo 1:
      Sobrecarga_de_construtores s1 = new Sobrecarga_de_construtores();
      s1.prim = 10;

      System.out.println("Sobrecarga 1");
      System.out.println("s1.prim = " + s1.prim);
      System.out.println("s1.sec = " + s1.sec);

      // Pode ser substituido por:
      Sobrecarga_de_construtores s2 = new Sobrecarga_de_construtores(10);

      System.out.println("Sobrecarga 2");
      System.out.println("s2.prim = " + s2.prim);
      System.out.println("s2.sec = " + s2.sec);


      // Exemplo 2:
      Sobrecarga_de_construtores s3 = new Sobrecarga_de_construtores();
      s3.prim = 5;
      s3.sec = -2;

      System.out.println("Sobrecarga 3");
      System.out.println("s3.prim = " + s3.prim);
      System.out.println("s3.sec = " + s3.sec);

      // Pode ser substituido por:
      Sobrecarga_de_construtores s4 = new Sobrecarga_de_construtores(5, -2);

      System.out.println("Sobrecarga 4");
      System.out.println("s4.prim = " + s4.prim);
      System.out.println("s4.sec = " + s4.sec);

   }
}
/*
Resultado:
Sobrecarga 1
s1.prim = 10
s1.sec = 0
Sobrecarga 2
s2.prim = 10
s2.sec = 0
Sobrecarga 3
s3.prim = 5
s3.sec = -2
Sobrecarga 4
s4.prim = 5
s4.sec = -2
*/

7 - Sobrecarga de metodos

Arquivo: Sobrecarga_de_metodos.java
// Sobrecarga_de_metodos.java

public class Sobrecarga_de_metodos {

   public double twice (int x){
      return 2*(double) x;
   }

   public double twice (double x) {
      return 2*x;
   }

   public double twice (String x) {
      return 2*(double)Integer.parseInt(x);
   }
}
Arquivo: Testando_sobrecarga_de_metodos2.java
// Testando_sobrecarga_de_metodos2.java

public class Testando_sobrecarga_de_metodos {
   public static void main(String args[]){
   Sobrecarga_de_metodos s = new Sobrecarga_de_metodos();

   System.out.println("Sobrecarga de Métodos:");

   System.out.println("twice(8) = " + s.twice(8));

   System.out.println("twice(0.4) = " + s.twice(0.4));

   System.out.println("twice(\"12\") = " + s.twice("12"));
   }
}
/*
Resultado:
Sobrecarga de Métodos:
twice(8) = 16.0
twice(0.4) = 0.8
twice("12") = 24.0
*/

8 - sobrecarga de metodos 2

Arquivo: Sobrecarga_de_metodos2.java
// Sobrecarga_de_metodos2.java

public class Sobrecarga_de_metodos2 {
   public long somatorio (int max) {
      int total=0;
      for (int i=1;i<=max;i++)
         total+=i;
      return total;
   }

   public long somatorio (int max, int incremento){
      int total=0;
      for (int i=1;i<=max;i+=incremento)
         total+=i;
      return total;
   }
}
Arquivo: Testando_sobrecarga_de_metodos2.java
// Testando_sobrecarga_de_metodos2.java

public class Testando_sobrecarga_de_metodos2 {
   public static void main(String args[]){
   Sobrecarga_de_metodos2 s = new Sobrecarga_de_metodos2();

   System.out.println("Sobrecarga de Métodos:");

   System.out.println("Somatório(8) = " + s.somatorio(8));

   System.out.println("Somatório(8, 3) = " + s.somatorio(8, 3));
   }
}
/*
Resultado:
Sobrecarga de Métodos:
Somatório(8) = 36
Somatório(8, 3) = 12
*/

9 - Heranca e Polimorfismo

Arquivo: LiquidificadorGenerico.java
// LiquidificadorGenerico.java

public class LiquidificadorGenerico {
   // Atributos
   protected int velocidade;
   protected int velocidadeMaxima;

   // Construtores
   public LiquidificadorGenerico(){
      velocidade = 0;
      velocidadeMaxima = 2;
   }

   public LiquidificadorGenerico(int v){
      this.ajustarVelocidadeMaxima(v);
   }

   // Metodos
   protected void ajustarVelocidadeMaxima(int v){
      if(v>0)
         velocidadeMaxima = v;
   }

   protected void ajustarVelocidade(int v){
      if(v>=0 && v<=velocidadeMaxima)
         velocidade = v;
   }

   public int obterVelocidadeMaxima(){
      return velocidadeMaxima;
   }

   public int obterVelocidade(){
      return velocidade;
   }
}
Herança
Arquivo: LiquidificadorAnalogico_heranca.java
// LiquidificadorAnalogico_heranca.java

public class LiquidificadorAnalogico_heranca extends LiquidificadorGenerico {
   // construtor
   public LiquidificadorAnalogico_heranca(){
      velocidade = 0;
   }

   // metodos
   public void aumentarVelocidade(){
      ajustarVelocidade(velocidade + 1);
   }

   public void diminuirVelocidade(){
     ajustarVelocidade(velocidade - 1);
   }
}
Arquivo: LiquidificadorDigital_heranca.java
// LiquidificadorDigital_heranca.java

public class LiquidificadorDigital_heranca extends LiquidificadorGenerico {
   // costrutor
   public LiquidificadorDigital_heranca(){
      velocidade = 0;
   }

   // metodo
   public void trocarVelocidade(int v){
      // aciona método protegido para troca de velocidade
      ajustarVelocidade(v);
   }
}
Polimorfismo
Arquivo: LiquidificadorInfo_polimorfismo.java
// LiquidificadorInfo_polimorfismo.java

public class LiquidificadorInfo_polimorfismo {
   public void printINFOobterVelocidadeAtual(LiquidificadorAnalogico_heranca l){
      System.out.println("Velocidade Atual: " + l.obterVelocidade());
   }

   public void printINFOobterVelocidadeAtual(LiquidificadorDigital_heranca l){
      System.out.println("Velocidade Atual: " + l.obterVelocidade());
   }
}
Teste
Arquivo: testando_o_liquidificador.java
// testando_o_liquidificador.java

public class testando_o_liquidificador {
   public static void main (String args[]){
// ==================================
   LiquidificadorInfo_polimorfismo l = new LiquidificadorInfo_polimorfismo();

// ==================================
// Liquidificador Analógico
// ==================================
   LiquidificadorAnalogico_heranca liquidificador1 = new LiquidificadorAnalogico_heranca();

   System.out.println("Liquidificador Analógico:");

   l.printINFOobterVelocidadeAtual(liquidificador1);

   liquidificador1.aumentarVelocidade();
   l.printINFOobterVelocidadeAtual(liquidificador1);

   liquidificador1.diminuirVelocidade();
   l.printINFOobterVelocidadeAtual(liquidificador1);

// ==================================
// Liquidificador Digital
// ==================================
   System.out.println("Liquidificador Digital:");

   LiquidificadorDigital_heranca liquidificador2 = new LiquidificadorDigital_heranca();

   l.printINFOobterVelocidadeAtual(liquidificador2);

// ==================================
// Liquidificador Digital
//
// Aciona método protegido para troca de velocidade:
// ==================================
   System.out.println("Aciona método protegido para troca de velocidade:");
   l.printINFOobterVelocidadeAtual(liquidificador2);

   liquidificador2.trocarVelocidade(5);
   l.printINFOobterVelocidadeAtual(liquidificador2);

   liquidificador2.trocarVelocidade(3);
   l.printINFOobterVelocidadeAtual(liquidificador2);

// ==================================
// Liquidificador Digital
//
// Mudando a velocidade corretamente:
// ==================================
   System.out.println("Mudando a velocidade corretamente:");
   l.printINFOobterVelocidadeAtual(liquidificador2);

   liquidificador2.trocarVelocidade(1);
   l.printINFOobterVelocidadeAtual(liquidificador2);

   liquidificador2.trocarVelocidade(2);
   l.printINFOobterVelocidadeAtual(liquidificador2);

   liquidificador2.trocarVelocidade(1);
   l.printINFOobterVelocidadeAtual(liquidificador2);

   liquidificador2.trocarVelocidade(0);
   l.printINFOobterVelocidadeAtual(liquidificador2);

   }
}
/*
Resultado:
Liquidificador Analógico:
Velocidade Atual: 0
Velocidade Atual: 1
Velocidade Atual: 0
Liquidificador Digital:
Velocidade Atual: 0
Aciona método protegido para troca de velocidade:
Velocidade Atual: 0
Velocidade Atual: 0
Velocidade Atual: 0
Mudando a velocidade corretamente:
Velocidade Atual: 0
Velocidade Atual: 1
Velocidade Atual: 2
Velocidade Atual: 1
Velocidade Atual: 0
*/

10 - Composicao

Arquivo: Cidade.java
// Cidade.java

public class Cidade {
   public String nome;
   public int populacao;

   public PontoGeografico_composicao coordenada;

   public Cidade(){
      nome = "";
      populacao = 0;

      coordenada = new PontoGeografico_composicao();
   }
}
Arquivo: PontoGeografico_composicao.java
public class PontoGeografico_composicao {
   public int x;
   public int y;

   public PontoGeografico_composicao(){
      x = 0;
      y = 0;
   }

   public void pontoGeografico(int pontox, int pontoy){
      x = pontox;
      y = pontoy;
   }

   public int coordenadaX(){
      return x;
   }

   public int coordenadaY(){
      return y;
   }
}
Arquivo: testando_ponto_geografico.java
// testando_ponto_geografico.java
public class testando_ponto_geografico {

   public static Cidade c;

   public static void main (String args[]){
      c = new Cidade();
      c.nome = "São Paulo";
      c.populacao = 123456;

      c.coordenada.pontoGeografico(123, 456);

      System.out.println("Nome = " + c.nome);
      System.out.println("População = " + c.populacao);
      System.out.println("Atributos:");
      System.out.println("Coordenada X = " + c.coordenada.x);
      System.out.println("Coordenada Y = " + c.coordenada.y);
      System.out.println("Metodos:");
      System.out.println("Coordenada X = " + c.coordenada.coordenadaX());
      System.out.println("Coordenada Y = " + c.coordenada.coordenadaY());
   }
}
/*
Resultado:
Nome = São Paulo
População = 123456
Atributos:
Coordenada X = 123
Coordenada Y = 456
Metodos:
Coordenada X = 123
Coordenada Y = 456
*/

11-classes_abstratas

Arquivo: Circle.java
public class Circle extends Shape{
   public void draw(){
      System.out.println("drawing circle");
   }
}
Arquivo: Rectangle.java
public class Rectangle extends Shape{
   public void draw(){
      System.out.println("drawing rectangle");
   }
}
Arquivo: Shape.java
public abstract class Shape{
   // metodos comum

   public void coordenadas(int x, int y, int largura, int altura){
      System.out.println("Coordenada x===" + x);
      System.out.println("Coordenada y===" + y);
      System.out.println("Largura========" + largura);
      System.out.println("Altura=========" + altura);
   }
   // metodos abstrato
   abstract void draw();
}
Arquivo: testando_classes_abstratas.java
class testando_classes_abstratas {
   public static void main(String args[]){
      Shape s1 = new Rectangle();
      s1.draw();
      s1.coordenadas(10, 15, 100, 50);

      Shape s2 = new Circle();
      s2.draw();
      s2.coordenadas(110, 65, 100, 50);
   }
}
/*
Resultado:
drawing rectangle
Coordenada x===10
Coordenada y===15
Largura========100
Altura=========50
drawing circle
Coordenada x===110
Coordenada y===65
Largura========100
Altura=========50
*/

12-Interface

Arquivo: inicio.java
interface inicio {
    // public, static and final
    final int a = 10;

    // public and abstract
    void display();
}
Arquivo: TestClass.java
class TestClass implements inicio {
    // Implementing the capabilities of interface.
    public void display(){
        System.out.println("Geek");
    }

    public static void main (String[] args){
        TestClass t = new TestClass();
        t.display();
        System.out.println(a);
    }
}
/*
Resultado:
Geek
10
*/

13 - conhecendo a RTTI

Arquivo: ClassInfo.java
// ClassInfo.java

import java.lang.reflect.*;

public class ClassInfo {
   static final String usage = "" +
"Uso:\n" +
   "\tClassInfo [+] pacote.class [palavra]\n" +
"Exibe relacao de metodos da classe 'pacote.class' ou apenas\n" +
"aqueles envolvendo 'palavra (opcional).\n" +
"A opcoa '+' indica que tambem devem ser listados os metodos\n" +
"e construtores das superclasses.\n";

   public static void main(String args[]){

      Class classe;
      Method metodos[];
      Constructor construtores[];
      boolean incluirHeranca;
      int argBusca = 0;

      try {
         incluirHeranca = args[0].equals("+");
         if(incluirHeranca){
             argBusca = (args.length>2 ? 2 : 0);
             classe = Class.forName(args[1]);
             metodos = classe.getDeclaredMethods();
             construtores = classe.getDeclaredConstructors();
         } else {
             argBusca = (args.length>1 ? 1 : 0);
             classe = Class.forName(args[0]);
             metodos = classe.getDeclaredMethods();
             construtores = classe.getDeclaredConstructors();
         }
         if(argBusca==0) {
             for(int i=0; i<construtores.length; i++)
                 System.out.println(construtores[i].toString());
             for(int i=0; i<metodos.length; i++)
                 System.out.println(metodos[i].toString());
         } else {
             for(int i=0; i<construtores.length; i++)
                 if(construtores[i].toString().indexOf(args[argBusca]) != -1)
                     System.out.println(construtores[i].toString());
             for(int i=0; i<metodos.length; i++)
                 if(metodos[i].toString().indexOf(args[argBusca])!= -1)
                     System.out.println(metodos[i].toString());
         }
         } catch(ClassNotFoundException e) {
             System.out.println("Classe nao encontrada: " + e);
         } catch(ArrayIndexOutOfBoundsException e) {
             System.out.println(usage);
         }
      System.exit(0);
   }

}
/*
Resultado:

java ClassInfo java.lang.String > aux.txt
[abrindo aux.txt num editor]
[Linux]
nano aux.txt
[ou Windows]
notepad aux.txt

java ClassInfo Bola
public Bola()

java ClassInfo Lampada
public Lampada()
public void Lampada.ligar()
public void Lampada.desligar()

java ClassInfo LiquidificadorAnalogico
public LiquidificadorAnalogico()
public void Liquidificador.aumentarVelocidade()
public void Liquidificador.diminuirVelocidade()
public int Liquidificador.obterVelocidade()

java ClassInfo LiquidificadorDigital
public LiquidificadorDigital()
public void Liquidificador2.trocarVelocidade(int)
public int Liquidificador2.obterVelocidade()

java ClassInfo java.lang.String
public java.lang.String(byte[])
public java.lang.String(byte[],int,int)
public java.lang.String(byte[],java.nio.charset.Charset)
public java.lang.String(byte[],java.lang.String) throws java.io.UnsupportedEncodingException
.
.
.
*/
Classes Pesquisadas:
Arquivo: Bola.java
// Bola.java
public class Bola {
   // Atributos
   public float raio;
   public boolean oca;
   public int material;
   public String cor;
}

/*
Bola
(from default)
--------------
cor
material
oca
raio
*/

/*
Bola
(from default)
--------------
cor: String
materia: int
oca: boolean
raio: float
*/

/*
Bola
(from default)
--------------
+ cor: String
+ materia: int
+ oca: boolean
+ raio: float
*/
Arquivo: Lampada.java
// Lampada.java

// Classe Lampada

public class Lampada {
   // atributos
   public boolean acesa;

   // metodos
   public void ligar() {
      acesa = true;
   }
   public void desligar() {
      acesa = false;
   }
}
/*
Lampada
(from default)
--------------
+ acesa boolean
--------------
+ desligar()
+ ligar()
*/
Arquivo: LiquidificadorAnalogico.java
// LiquidificadorAnalogico.java

public class LiquidificadorAnalogico {
   // atributos
   private int velocidade;

   // metodos
   public void aumentarVelocidade() {
      switch (velocidade) {
         case 0:
            // se desligado passa para velocidade baixa
            velocidade++;
            break;
         case 1:
            // se velocidade baixa passa para velocidade alta
            velocidade++;
            break;
            // se velocidade alta não vaz nada (manter velocidade)
      }
   }

   public void diminuirVelocidade(){
      switch (velocidade){
         case 1:
            // se velocidade baixa passa para desligado
            velocidade--;
            break;
         case 2:
            // se velocidade alta passa para velocidade baixa
            velocidade--;
            break;
            // se desligado não faz nada
      }
   }

   public int obterVelocidade(){
      return velocidade;
   }
}
/*
Liquidificador
Aumentando velocidade...
Velocidade atual = 1
Aumentando velocidade...
Velocidade atual = 2
Aumentando velocidade...
Velocidade atual = 2
Aumentando velocidade...
Velocidade atual = 2
Aumentando velocidade...
Velocidade atual = 2
Diminuindo velocidade...
Velocidade atual = 1
Diminuindo velocidade...
Velocidade atual = 0
Diminuindo velocidade...
Velocidade atual = 0
Diminuindo velocidade...
Velocidade atual = 0
Diminuindo velocidade...
Velocidade atual = 0
*/
Arquivo:  LiquidificadorDigital.java
// LiquidificadorDigital.java

public class LiquidificadorDigital {
   // atributos
   protected int velocidade;

   // métodos
   public void trocarVelocidade(int v) {
      if (v>=0 && v<=2) {
         velocidade = v;
      }
   }
   public int obterVelocidade(){
      return velocidade;
   }
}
/*
LiquidificadorDigital
(from default)
--------------
# velocidade: int
--------------
+obterVelocidade(): int
+trocarVelocidade(int)
*/

14 - Conhecendo a coleta de lixo

Arquivo: Lampada.java
// Lampada.java

// Classe Lampada

public class Lampada {
   // atributos
   public boolean acesa;

   // metodos
   public void ligar() {
      acesa = true;
   }
   public void desligar() {
      acesa = false;
   }
}
/*
Lampada
(from default)
--------------
+ acesa boolean
--------------
+ desligar()
+ ligar()
*/
Arquivo: testando_coleta_de_lixo.java
// testando_coleta_de_lixo.java

public class testando_coleta_de_lixo {

   public static Lampada lamp;

   public static void main (String args[]){

      lamp = new Lampada();

      lamp.ligar();
      System.out.println("Lampada Criada (Acesa = " + lamp.acesa + ")");
      lamp.desligar();
      System.out.println("Lampada Criada (Acesa = " + lamp.acesa + ")");

      lamp = null;

      try {
         lamp.ligar();
         System.out.println("Lampada Criada (Acesa = " + lamp.acesa + ")");
         lamp.desligar();
         System.out.println("Lampada Criada (Acesa = " + lamp.acesa + ")");
      } catch (java.lang.NullPointerException e) {
         System.out.println("O Construtor lamp esta na Coleta de Lixo.");
      }

      Runtime rt = Runtime.getRuntime();

      System.out.println("Memoria: " + rt.freeMemory());

      System.out.println("Liberando memoria com System.gc()");
      System.gc();
      System.out.println("Memoria: " + rt.freeMemory());

      System.out.println("O Construtor lamp NAO esta mais na Coleta de Lixo.");

      lamp = new Lampada();

      lamp.ligar();
      System.out.println("Lampada Criada (Acesa = " + lamp.acesa + ")");
      lamp.desligar();
      System.out.println("Lampada Criada (Acesa = " + lamp.acesa + ")");

      System.out.println("Memoria: " + rt.freeMemory());
   }
}
/*
Resultado:
Lampada Criada (Acesa = true)
Lampada Criada (Acesa = false)
O Construtor lamp esta na Coleta de Lixo.
Memoria: 61464664
Liberando memoria com System.gc()
Memoria: 62332176
O Construtor lamp NAO esta mais na Coleta de Lixo.
Lampada Criada (Acesa = true)
Lampada Criada (Acesa = false)
Memoria: 61983512
*/