|
|
(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éctrico</code> (esta subclasse da primeira).
| |
| * Duas classes internas relacionadas entre si, mas pertencendo cada uma a sua classe externa.
| |
| | |
| Note-se que não há qualquer problema em reutilizar nomes de classes internas em múltiplas classes externas, uma vez que a sua identificação se faz de forma relativa ao contexto em que sã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">"Motor0 criado ("</FONT> + _estado + <FONT COLOR="#dd0000">")"</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">"Carro criado"</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">"andar"</FONT>); }
| |
| }
| |
| | |
| === Carro Eléctrico ===
| |
| | |
| <B>public</B> <B>class</B> CarroEléctrico <B>extends</B> Carro {
| |
|
| |
| <B>class</B> Motor <B>extends</B> Motor0 {
| |
| <FONT COLOR="#000080">Motor</FONT>() { <B>super</B>(<FONT COLOR="#dd0000">"LIGADO"</FONT>); }
| |
| <FONT COLOR="#800000">void</FONT> <FONT COLOR="#000080">ligar</FONT>() { _estado = <FONT COLOR="#dd0000">"LIGADO"</FONT>; <B><FONT COLOR="#0095ff">System</FONT></B>.<FONT COLOR="#000080">out</FONT>.<FONT COLOR="#000080">println</FONT>(<FONT COLOR="#dd0000">"Motor "</FONT> + _estado); }
| |
| <FONT COLOR="#800000">void</FONT> <FONT COLOR="#000080">desligar</FONT>() { _estado = <FONT COLOR="#dd0000">"DESLIGADO"</FONT>; <B><FONT COLOR="#0095ff">System</FONT></B>.<FONT COLOR="#000080">out</FONT>.<FONT COLOR="#000080">println</FONT>(<FONT COLOR="#dd0000">"Motor "</FONT> + _estado); }
| |
| }
| |
|
| |
| <FONT COLOR="#000080">CarroEléctrico</FONT>() { <B><FONT COLOR="#0095ff">System</FONT></B>.<FONT COLOR="#000080">out</FONT>.<FONT COLOR="#000080">println</FONT>(<FONT COLOR="#dd0000">"Carro eléctrico criado"</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">"andar eléctrico"</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éctrico</FONT>();
| |
| e.<FONT COLOR="#000080">andar</FONT>();
| |
| }
| |
| }
| |
| | |
| === Resultados ===
| |
| | |
| <FONT COLOR="#993366"><B>$ java Teste7</B></FONT>
| |
| Carro criado
| |
| andar
| |
| Carro criado
| |
| Carro eléctrico criado
| |
| andar
| |
| Motor0 criado (LIGADO)
| |
| Motor LIGADO
| |
| andar eléctrico
| |
| MotorDESLIGADO
| |
| | |
| <FONT COLOR="#993366"><B>$ ls</B></FONT>
| |
| <B>Carro.java</B> Carro.class Carro$Motor.class Carro$Motor0.class
| |
| <B>CarroEléctrico.java</B> CarroEléctrico.class CarroElé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">"Motor"</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">"Carro"</FONT>);
| |
| Motor m = <B>new</B> <FONT COLOR="#000080">Motor</FONT>();
| |
| }
| |
| }
| |
| | |
| === Carro Eléctrico ===
| |
| | |
| <B>public</B> <B>class</B> CarroElé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">"Motor eléctrico"</FONT>); }
| |
| }
| |
|
| |
| <B>public</B> <FONT COLOR="#000080">CarroEléctrico</FONT>() {
| |
| <B><FONT COLOR="#0095ff">System</FONT></B>.<FONT COLOR="#000080">out</FONT>.<FONT COLOR="#000080">println</FONT>(<FONT COLOR="#dd0000">"Carro eléctrico"</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éctrico</FONT>();
| |
| }
| |
| }
| |
| | |
| === Resultados ===
| |
| | |
| <FONT COLOR="#993366"><B>$ java Teste9</B></FONT>
| |
| Carro
| |
| Motor
| |
| Carro eléctrico
| |
| Motor
| |
| Motor eléctrico
| |
| | |
| <FONT COLOR="#993366"><B>$ ls</B></FONT>
| |
| '''Carro.java''' Carro.class Carro$Motor.class
| |
| '''CarroEléctrico.java''' CarroEléctrico.class CarroEléctrico$Motor.class
| |
| '''Teste9.java''' Teste9.class
| |
| | |
| | |
| [[Category:Ensino]]
| |
| [[Category:PO]]
| |