Classes Internas (Java)/Carros e Motores: Difference between revisions

From Wiki**3

< Classes Internas (Java)
 
(12 intermediate revisions by the same user not shown)
Line 1: Line 1:
{{TOCright}}
#REDIRECT [[ist:Classes Internas (Java)/Carros e Motores]]
Os exemplos seguintes apresentam algumas possibilidades de extensão (herança) de classes internas e externas.
 
== Classes externas e internas ==
* Duas classes externas relacionadas entre si: <code>Carro</code> e <code>CarroEl&eacute;ctrico</code> (esta subclasse da primeira).
* Duas classes internas relacionadas entre si, mas pertencendo cada uma a sua classe externa.
 
Note-se que n&atilde;o h&aacute; qualquer problema em reutilizar nomes de classes internas em m&uacute;ltiplas classes externas, uma vez que a sua identifica&ccedil;&atilde;o se faz de forma relativa ao contexto em que s&atilde;o definidas.
 
=== Carro ===
 
  <B>public</B> <B>class</B> Carro {
    <B>protected</B> <B><FONT COLOR="#0095ff">String</FONT></B> _estado;
 
    <B>abstract</B> <B>class</B> Motor {
      <B>abstract</B> <FONT COLOR="#800000">void</FONT> <FONT COLOR="#000080">ligar</FONT>();
      <B>abstract</B> <FONT COLOR="#800000">void</FONT> <FONT COLOR="#000080">desligar</FONT>();
    }
 
    <B>class</B> Motor0 {
    <FONT COLOR="#000080">Motor0</FONT>(<B><FONT COLOR="#0095ff">String</FONT></B> estado) {
        _estado = estado;
        <B><FONT COLOR="#0095ff">System</FONT></B>.<FONT COLOR="#000080">out</FONT>.<FONT COLOR="#000080">println</FONT>(<FONT COLOR="#dd0000">&quot;Motor0 criado (&quot;</FONT> + _estado + <FONT COLOR="#dd0000">&quot;)&quot;</FONT>);
      }
    }
 
    <FONT COLOR="#000080">Carro</FONT>()      { <B><FONT COLOR="#0095ff">System</FONT></B>.<FONT COLOR="#000080">out</FONT>.<FONT COLOR="#000080">println</FONT>(<FONT COLOR="#dd0000">&quot;Carro criado&quot;</FONT>); }
    <FONT COLOR="#800000">void</FONT> <FONT COLOR="#000080">andar</FONT>() { <B><FONT COLOR="#0095ff">System</FONT></B>.<FONT COLOR="#000080">out</FONT>.<FONT COLOR="#000080">println</FONT>(<FONT COLOR="#dd0000">&quot;andar&quot;</FONT>);        }
  }
 
=== Carro El&eacute;ctrico ===
 
  <B>public</B> <B>class</B> CarroEl&eacute;ctrico <B>extends</B> Carro {
 
    <B>class</B> Motor <B>extends</B> Motor0 {
      <FONT COLOR="#000080">Motor</FONT>() { <B>super</B>(<FONT COLOR="#dd0000">&quot;LIGADO&quot;</FONT>); }
      <FONT COLOR="#800000">void</FONT> <FONT COLOR="#000080">ligar</FONT>()    { _estado = <FONT COLOR="#dd0000">&quot;LIGADO&quot;</FONT>;    <B><FONT COLOR="#0095ff">System</FONT></B>.<FONT COLOR="#000080">out</FONT>.<FONT COLOR="#000080">println</FONT>(<FONT COLOR="#dd0000">&quot;Motor &quot;</FONT> + _estado); }
      <FONT COLOR="#800000">void</FONT> <FONT COLOR="#000080">desligar</FONT>() { _estado = <FONT COLOR="#dd0000">&quot;DESLIGADO&quot;</FONT>; <B><FONT COLOR="#0095ff">System</FONT></B>.<FONT COLOR="#000080">out</FONT>.<FONT COLOR="#000080">println</FONT>(<FONT COLOR="#dd0000">&quot;Motor &quot;</FONT> + _estado); }
    }
 
    <FONT COLOR="#000080">CarroEl&eacute;ctrico</FONT>() { <B><FONT COLOR="#0095ff">System</FONT></B>.<FONT COLOR="#000080">out</FONT>.<FONT COLOR="#000080">println</FONT>(<FONT COLOR="#dd0000">&quot;Carro el&eacute;ctrico criado&quot;</FONT>); }
 
    <FONT COLOR="#800000">void</FONT> <FONT COLOR="#000080">andar</FONT>() {
      <B>super</B>.<FONT COLOR="#000080">andar</FONT>();
      Motor m = <B>new</B> <FONT COLOR="#000080">Motor</FONT>();
      m.<FONT COLOR="#000080">ligar</FONT>();
      <B><FONT COLOR="#0095ff">System</FONT></B>.<FONT COLOR="#000080">out</FONT>.<FONT COLOR="#000080">println</FONT>(<FONT COLOR="#dd0000">&quot;andar el&eacute;ctrico&quot;</FONT>);
      m.<FONT COLOR="#000080">desligar</FONT>();
    }
 
  }
 
=== Teste ===
 
  <B>public</B> <B>class</B> Teste7 {
    <B>public</B> <FONT COLOR="#800000">static</FONT> <FONT COLOR="#800000">void</FONT> <FONT COLOR="#000080">main</FONT>(<B><FONT COLOR="#0095ff">String</FONT></B>[] args) {
 
      Carro c = <B>new</B> <FONT COLOR="#000080">Carro</FONT>();
      c.<FONT COLOR="#000080">andar</FONT>();
 
      Carro e = <B>new</B> <FONT COLOR="#000080">CarroEl&eacute;ctrico</FONT>();
      e.<FONT COLOR="#000080">andar</FONT>();
    }
  }
 
=== Resultados ===
 
  <FONT COLOR="#993366"><B>$ java Teste7</B></FONT>
  Carro criado
  andar
  Carro criado
  Carro el&eacute;ctrico criado
  andar
  Motor0 criado (LIGADO)
  Motor LIGADO
  andar el&eacute;ctrico
  MotorDESLIGADO
 
  <FONT COLOR="#993366"><B>$ ls</B></FONT>
  <B>Carro.java</B> Carro.class Carro$Motor.class Carro$Motor0.class
  <B>CarroEl&eacute;ctrico.java</B> CarroEl&eacute;ctrico.class CarroEl&eacute;ctrico$Motor.class
  <B>Teste7.java</B> Teste7.class
 
== Classe externa deriva de classe interna ==
* [[Carro & Motor (classe externa deriva de classe interna)]]
 
== Especialização de classe interna ==
 
Este exemplo apresenta quatro classes: duas internas e duas externas. A relação entre as classes internas é de herança; a relação entre as classes externas também é de herança.
 
Pretende-se demonstrar a utilização de classes internas quando há reutilização por herança. Note-se que cada classe externa utiliza sempre as suas classes internas, independentemente de o objecto em causa ser de uma subclasse.
 
=== Carro ===
 
  <B>public</B> <B>class</B> Carro {
 
    <B>protected</B> <B>class</B> Motor {
      <FONT COLOR="#000080">Motor</FONT>() { <B><FONT COLOR="#0095ff">System</FONT></B>.<FONT COLOR="#000080">out</FONT>.<FONT COLOR="#000080">println</FONT>(<FONT COLOR="#dd0000">&quot;Motor&quot;</FONT>); }
    }
 
    <B>public</B> <FONT COLOR="#000080">Carro</FONT>() {
      <B><FONT COLOR="#0095ff">System</FONT></B>.<FONT COLOR="#000080">out</FONT>.<FONT COLOR="#000080">println</FONT>(<FONT COLOR="#dd0000">&quot;Carro&quot;</FONT>);
      Motor m = <B>new</B> <FONT COLOR="#000080">Motor</FONT>();
    }
  }
 
=== Carro Eléctrico ===
 
  <B>public</B> <B>class</B> CarroEl&eacute;ctrico <B>extends</B> Carro {
 
    <B>protected</B> <B>class</B> Motor <B>extends</B> Carro.<FONT COLOR="#000080">Motor</FONT> {
      <FONT COLOR="#000080">Motor</FONT>() { <B><FONT COLOR="#0095ff">System</FONT></B>.<FONT COLOR="#000080">out</FONT>.<FONT COLOR="#000080">println</FONT>(<FONT COLOR="#dd0000">&quot;Motor el&eacute;ctrico&quot;</FONT>); }
    }
 
    <B>public</B> <FONT COLOR="#000080">CarroEl&eacute;ctrico</FONT>() {
      <B><FONT COLOR="#0095ff">System</FONT></B>.<FONT COLOR="#000080">out</FONT>.<FONT COLOR="#000080">println</FONT>(<FONT COLOR="#dd0000">&quot;Carro el&eacute;ctrico&quot;</FONT>);
      Motor m = <B>new</B> <FONT COLOR="#000080">Motor</FONT>();
    }
  }
 
=== Teste ===
 
  <B>public</B> <B>class</B> Teste9 {
    <B>public</B> <FONT COLOR="#800000">static</FONT> <FONT COLOR="#800000">void</FONT> <FONT COLOR="#000080">main</FONT>(<B><FONT COLOR="#0095ff">String</FONT></B>[] args) {
      <B>new</B> <FONT COLOR="#000080">CarroEl&eacute;ctrico</FONT>();
    }
  }
 
=== Resultados ===
 
  <FONT COLOR="#993366"><B>$ java Teste9</B></FONT>
  Carro
  Motor
  Carro el&eacute;ctrico
  Motor
  Motor el&eacute;ctrico
 
  <FONT COLOR="#993366"><B>$ ls</B></FONT>
  '''Carro.java''' Carro.class Carro$Motor.class
  '''CarroEl&eacute;ctrico.java''' CarroEl&eacute;ctrico.class CarroEl&eacute;ctrico$Motor.class
  '''Teste9.java''' Teste9.class
 
 
[[Category:Ensino]]
[[Category:PO]]

Latest revision as of 14:18, 7 November 2018