Explorar E-books
Categorias
Explorar Audiolivros
Categorias
Explorar Revistas
Categorias
Explorar Documentos
Categorias
Capítulo 2
Programação orientada a objetos.............................29
2.1 Conceitos da programação orientada a objetos ........................... 30
2.1.1 Classe .......................................................................................... 32
2.1.1.1 Quali cadores de acesso ......................................................... 33
2.1.1.2 Pacotes ..................................................................................... 35
2.1.1.3 Import ...................................................................................... 36
2.1.1.4 Comentários ............................................................................ 37
2.1.2 Atributos ..................................................................................... 38
2.1.3 Métodos ...................................................................................... 39
2.1.3.1 Identi cador this ..................................................................... 40
2.1.4 Mensagem e modularização de código ...................................... 41
2.1.5 Objeto ou instanciação ............................................................... 44
Capítulo 3
Construtores, destrutores e encapsulamento............51
3.1 Construtores .................................................................................. 51
3.2 Destrutores e Garbage Collector (Coletor de Lixo) ...................... 54
3.2.1 Garbage Collector ....................................................................... 55
3.3 Encapsulamento ............................................................................ 56
VIII JAVA com Orientação a Objetos
Capítulo 4
Herança, polimor smo e interface...........................63
4.1 Herança .......................................................................................... 63
4.2 Polimor smo ................................................................................. 69
4.2.1 Sobrecarga .................................................................................. 70
4.2.2 Cast ............................................................................................. 71
4.2.3 instanceof ................................................................................... 73
4.2.4 Sobrecarga de construtores ....................................................... 74
4.2.5 Rede nição ................................................................................. 74
4.3 Interface ......................................................................................... 76
4.3.1 Herança múltipla ........................................................................ 83
Capítulo 5
Ferramentas úteis para o dia a dia............................85
5.1 Manipulação de strings ................................................................. 85
5.1.1 Construtores da classe String .................................................... 86
5.1.2 Outros métodos.......................................................................... 86
5.2 Data e hora ..................................................................................... 88
5.3 Operações matemáticas ................................................................ 93
5.4 rabalho com vetores especiais .................................................... 95
5.4.1 Classe Vector............................................................................... 96
5.4.2 Classe HashMap ......................................................................... 98
5.4.3 Classe Arrays .............................................................................. 99
Capítulo
ratamento6de exceções e entrada de dados............101
6.1 ratadores de exceções ................................................................ 102
6.1.1 Trows....................................................................................... 106
6.2 Entrada de dados ......................................................................... 107
Sumário IX
Capítulo 7
Manipulação de arquivos de texto ................ ..........111
7.1 Arquivos ....................................................................................... 111
7.2 Entradas ....................................................................................... 112
7.3 Saídas ........................................................................................... 114
7.4 Streams ........................................................................................ 116
7.5 Acessos aleatórios em arquivos .................................................. 118
Apêndice I
Instalação do Sdk e Con guração das Variáveis de Ambiente
(Windows Xp) .................................................................................... 123
Apêndice II
JAVADOC........................................................................................... 129
Capítulo 1
Conceitos básicos da tecnologia Java
Quando falamos em programação, não há como deixar de vislumbrar
tal atividade como sendo um elemento central na vida de um pro ssional
ligado à área de Ciência da Computação e a ns. No cotidiano, o mínimo que
se espera de um pro ssional de I é que este domine os elementos e os con-
ceitos básicos, aplicados a uma determinada linguagem de programação.
O mercado atualmente oferta uma in nidade de possibilidades
de linguagens de programação para a construção de softwares, indo das
mais complexas e trabalhosas até as mais simples. Existem, entre essas
linguagens de programação, várias que são bem aceitas no mercado, que
consideram obviamente variáveis estratégicas, tais como preço, velocidade
da curva de aprendizagem e desenvolvimento. Entre tais, a linguagem e a
plataforma de desenvolvimento
tornado-se uma de aplicações
das mais utilizadas Java
e aceitas no vêm noIsso,
mercado. decorrer dosaoanos
graças seu
potencial tecnológico combinado ao paradigma de orientações a objetos,
além de considerar os custos envolvidos.
O Java é uma tecnologia que foi srcinalmente desenvolvida pela Sun
Microsystem em meados de 1995, sendo regida pela GPL (General Public
License). A Oracle Corporation adquiriu todos os direitos pela Sun e obvia-
mente, também sobre a tecnologia Java. Para a maioria dos autores e desen-
volvedores, a tecnologia Java pode ser de nida como:
“simples, distribuída, interpretada, robusta, segura, de arquitetura
neutra, portátil, multifunções e dinâmica“.
Ao considerar tais perspectivas, o objetivo deste capítulo é apresentar
e preparar o leitor para compreender e aplicar os fundamentos básicos da tec-
nologia Java. Estes são úteis e de extrema importância para a compreensão
dos demais conceitos vinculados à plataforma de desenvolvimento mantida
pela Oracle e que serão considerados nos próximos capítulos de nosso livro.
//Classe PrimeiroPrograma.java
class PrimeiroPrograma{
public static void main (String arg []){
System.out.println(“Olá leitor”);
}
}
javac PrimeiroPrograma.java
java PrimeiroPrograma
Caso o leitor tenha dúvidas sobre como realizar a navegação nos di-
retórios de seu computador, indicamos a leitura de qualquer tutorial que
auxilie na manipulação de comandos na linha de comando de seu sistema
operacional.
Mas, outro ponto importante na construção de uma aplicação no Java,
ou seja, na construção das classes e que deve ser considerado para darmos
um passoclasse
de uma adiante emEm
Java. nosso aprendizado
muitos momentos,consiste na de jánição
conforme das variáveis
mencionamos, as
variáveis na linguagem Java aparecerão nos textos, livros e tutoriais, sendo
tratadas como atributos. Logo, qual a diferença entre atributos e variáveis?
A diferença entre eles é que um atributo está intrinsecamente ligado
às características da classe, ou seja, descreve algo ligado ao contexto ou à
ideia central à qual a classe está relacionada ou preocupa-se em descrever.
Um exemplo seria um atributo para manter os dados de RG de uma pessoa.
Já as variáveis não precisam ser aplicadas necessariamente a um contexto da
classe, como, por exemplo, em uma variável auxiliar para o comando de re-
petição FOR ou mesmo uma constante. Por enquanto, não se preocupe com
isso, pois no decorrer da disciplina, essa diferença se tornará mais clara e
logo você saberá diferenciar tais elementos de programação com base nos
paradigmas da orientação a objetos.
Em continuidade ao nosso aprendizado sobre os conceitos básicos da
tecnologia Java, vamos por a mão na massa e criar nosso segundo progra-
ma, utilizando o armazenamento em memória com variáveis. ranscreva o
código a seguir para um editor de texto, assim como zemos em nosso pri-
meiro programa. Depois disso, compile e execute-o por meio dos comandos
javac e java, respectivamente, em um prompt de comando de seu sistema
10 JAVA com Orientação a Objetos
// SegundoPrograma.java
class SegundoPrograma{
public static void main (String arg []){
int a = 5;
a = 5+10;
System.out.println(“O valor é:”+a);
}
}
outros operadores que são de suma importância para a linguagem Java, es-
tando relacionados principalmente ao processo lógico dentro de nossos pro-
gramas, como no caso dos testes condicionais, sendo que os mais utilizados
são listados no quadro da abela 2.
Entre as várias considerações que podem ser feitas quanto ao uso dos
operadores, devemos destacar ainda a outra funcionalidade atribuída ao ope-
rador “+”, que consiste na concatenação de Strings, como pode ser observado
em nosso próximo exemplo. Conforme mencionado anteriormente e como
pode ser vislumbrado na abela 1, uma String não é um tipo primitivo, mas
sim uma classe. Logo, você deve estar perguntando-se: “Então, qual a dife-
rença entre um tipo primitivo e uma classe”? Existem várias diferenças que
poderiam ser citadas, mas como diversas delas estão relacionadas ao concei-
to de orientação a objetos, do qual ainda não tratamos, vamos prender-nos
inicialmente à diferença de que uma classe geralmente agrega funcionalida-
des das quais os tipos primitivos não dispõem.
Essas funcionalidades, no caso, são denominadas de métodos e que co-
nheceremos mais profundamente no Capitulo 2. Um exemplo que demons-
tra essa diferença com a utilização de uma funcionalidade pode ser observa-
do no exemplo a seguir, no qual é realizada a conversão de uma String em um
inteiro, sendo de extrema importância para os vários programas que iremos
construir. Logo, tente memorizar tal funcionalidade da classe Integer.
Capítulo 1 - Conceitos básicos da tecnologia Java 13
// TerceiroPrograma.java
public class TerceiroPrograma {
public static void main(String args[]){
String entrada = “1”;
entrada = entrada+”1”;
Integer numero = Integer.parseInt(entrada);
System.out.println(entrada);
System.out.println(numero);
}
}
Note que no exemplo anterior, é criada uma variável do tipo String de-
nominada entrada, que recebe o caractere “1”. Note que não é um número,
mas sim um caractere. Em nossa segunda linha do exemplo, o valor existente
na variável de entrada é concatenado a um novo caractere, no caso “1”. Note
que
caso,opor
resultado
se tratardessa operação matematicamente
de manipulação, em especí co umaseria o valor 2, mas,
concatenação, no
o valor
mantido na variável será “11”, pois não estamos lidando com uma operação
matemática. Na terceira linha é feita a transformação desse conjunto de ca-
racteres em um tipo número, que possibilitará as operações matemáticas.
Nas duas últimas linhas do exemplo são realizadas as impressões em console
dos valores existentes nas duas variáveis do programa.
//QuartoPrograma.java
import java.util.Scanner;
class QuartoPrograma{
public staticentrada
Scanner void main(String[] arg){
= new Scanner(System.in);
System.out.println(“Digite um numero “);
if (expressão_lógica){
Sequência 1;
}else{
Sequência 2;
}
//Classe ExemploIf.java
class ExemploIf{
public static void main (String[] args){
if (args.length > 0){
System.out.println(“Dentro do if”);
}else{
System.out.println(“Dentro do else”);
}
}
}
/Classe ExemploSwitch.java
class ExemploSwitch{
public static void main (String args[]){
switch(args[0].charAt(0)) {
case ‘A’:System.out.println(“Vogal A”);
break;
case ‘E’:System.out.println(“Vogal E”);
break;
default:System.out.println(“Não é vogal”);
}
}
}
Repare que, em nosso exemplo, trabalhamos mais uma vez com a uti-
lização do vetor args, ao qual os valores são passados durante a execução,
conforme feito no exemplo para a cláusula if. Aqui, nosso programa faz uma
veri cação se a vogal presente na primeira posição do vetor é a vogal ‘A’ ou
‘E’, ou seja, realiza a classi cação dos valores testados. É interessante men-
cionarmos a existência da diretiva default no exemplo, que será executada se
nenhum dos casos for realizado. Então, salve seu programa e execute, con-
forme apresentado a seguir.
18 JAVA com Orientação a Objetos
Veja que neste exemplo, zemos uso mais uma vez dos argumentos
para passar valores para que sejam veri cados em nosso programa, em espe-
cí co a vogal ‘A’.
Prosseguindo, outra estrutura a ser mencionada no Java é a estrutura
de repetição condicional while. O while consiste em uma cláusula na qual seu
bloco
da forserá executado
verdadeira. durante ou
A execução do‘ENQUANO’ a expressão
bloco só será realizada lógica
desde quea ser testa-
a expres-
são lógica analisada seja verdadeira. A síntaxe para a estrutura de repetição
while é descrita a seguir.
Assim, mais uma vez iremos recorrer a um exemplo para a xação des-
ta estrutura de controle de uxo. No programa abaixo, iremos imprimir os
valores menores que o passado no argumento durante a execução para nosso
programa.
//Classe ExemploWhile.java
class ExemploWhile{
public static void main (String args[]){
int j = 10;
Capítulo 1 - Conceitos básicos da tecnologia Java 19
do{
Sequência;
}
while (expressão_lógica);
//ExemploDoWhile.java
public class ExemploDoWhile {
public static void main (String args[]) {
int min, max;
Scanner entradas = new Scanner(System.in);
System.out.print(“Digite o valor minimo:”);
min = entradas.nextInt();
System.out.print(“Digite o valor maximo:”);
max = entradas.nextInt();
do {
System.out.println(“” + min + “ < “ + max);
min++;
20 JAVA com Orientação a Objetos
max--;
} while (min < max);
}
}
for(inicialização;
condição;
incremento/decremento){
Sequência;
//Classe ExemploFor.java
class ExemploFor{
public static void main (String args[]){
for (int j=0; j<10; j++){
System.out.println(j);
}
}
}
//Classe ExemploArray.java
class ExemploArray{
public static void main(String[] args){
int[] vetor = new int[ 10 ];
System.out.println(“Tamanho vetor:”+vetor.
length);
for (int i = 0; i < vetor.length; i++) {
vetor[i] = i;
System.out.println(vetor[i
}
}
}
0123456789
10 20 50 70
//Classe NovoVetor.java
class VetorInicializado{
public static void main(String[] args){
double[] nota = {7,8, 8,4, 4,2, 1,8, 6,4};
for(int i=0; i < nota.length-1;i++)
System.out.println(“Valor no vetor:”+nota[i]);
}
}
//Classe Matrizes.java
class Matrizes{
public static void main(String[] args){
int [][]matriz = new int[2][3];
for(int i=0; i< matriz.length; i++){
System.out.println(“Linha: “+i);
for(int j=0; j< matriz[i].length; j++){
matriz[i][j]= i+1;
System.out.println(“Valores da coluna”);
System.out.println(matriz[i][j
}
}
}
}
Exemplo:
double posicao[][], controle[][];
int []indice;
Exemplo:
posicao = new double[10][20];
indice = new int[5];
Exemplo:
nota[3] = 7.8;
posição[4][6] = 3365;
double[] nota = {7,8, 8,4, 4,2, 1,8, 6,4};
1.6 Funções
Caro leitor, chegamos ao último tema que será analisado neste capítu-
lo, que se trata do trabalho com funções. Assim como nas demais linguagens,
uma função consiste em uma rotina ou sub-rotina automatizada. As funções
26 JAVA com Orientação a Objetos
// Classe ExemploFuncao.java
public class ExemploFuncao{
public static void mostrarMensagem() {
System.out.println(“Chamei minha função”);
}
Classe;
Atributos e métodos;
Objeto;
Referência a Objetos;
Construtores;
Encapsulamento;
Herança;
Polimor smo;
Interface.
Caro leitor, mas o que você deve ter em mente quando iniciar o estudo
sobre os conceitos da orientação a objeto é o fato de que tal paradigma irá
auxiliá-lo a entender e visualizar de maneira mais ampla um problema a ser
resolvido, conseguindo assim, uma maior independência entre a programa-
ção e o modelo do problema a ser trabalhado, o que obviamente irá facilitar
possíveis manutenções e reutilizações com uma modularização, como já citei.
2.1.1 Classe
// Classe Carro.java
class Carro{
String cor;
String marca;
String modelo;
Capítulo 2 - Programação orientada a objetos 33
void andar(){
System.out.println(“Carro andando”);
}
void parar(){
System.out.println(“Carro parado”);
}
}
//Classe Carro.java
public class Carro{
public String cor;
public String marca;
public String modelo;
2.1.1.2 Pacotes
Com isso, temos outro conceito que interfere nas classes tanto quan-
to a visibilidade. No caso, consiste na ideia de pacotes, declarados no Java
como package. A principal função desta diretiva no Java está na organiza-
ção das classes e obviamente em sua visualização por outras classes de um
projeto. O que podemos então veri car é que o pacote está diretamente
36 JAVA com Orientação a Objetos
2.1.1.3 Import
package local.diretorio;
// métodos da classe
}
Capítulo 2 - Programação orientada a objetos 37
2.1.1.4 Comentários
Bom pessoal, os comentários são extremamente úteis na linguagem
Java. Isso porque não somente permitem os simples comentários, mas ga-
nham valor ao considerarmos as possibilidades que a própria máquina vir-
tual de ne para tal elemento. No caso, a tecnologia Java de ne três tipos de
comentários, sendo eles: com uma linha, múltiplas linhas e documentação.
O primeiro, com uma linha, utiliza duas barras (//) para marcar seu
início e tudo após as duas barras é considerado um comentário pela JVM.
O segundo tipo de comentário utiliza a combinação /* e */ para delimitar as
múltiplas linhas de comentários. E o último tipo consiste no comentário de
múltiplas linhas, semelhante ao segundo, porém com o propósito de docu-
mentar a programação.
gramação, que todas as No Java,sejam
classes recomenda-se como euma
documentadas paraboa prática
isso, de pro-
a tecnologia
Java nos dá uma mãozinha, como pode ser observado no Apêndice II deste
livro. Na abela 4, é demonstrada a utilização dos comentários apresentados.
ipos de comentários
/*
comentário
de múltiplas linhas
*/
/** comentário de documentação que também
* podem ter múltiplas linhas
*/
38 JAVA com Orientação a Objetos
para a Como
criaçãomencionado, o apêndice
da documentação deste
de suas livro traz
classes, comexemplos
a utiliza-
ção do suporte fornecido pela JVM.
2.1.2 Atributos
Um atributo
representa nada mais ou
uma característica é que
umauma variável contextualizada,
propriedade na qual
da classe de objetos em
questão. É uma variável destinada a armazenar informações associadas à
classe. Por exemplo, vamos considerar novamente o famoso carro apresenta-
do nas seções anteriores. Seja qual for o carro, várias características podem
ser elencadas para ele, entre elas, sua marca. rata-se de uma propriedade
comum a todos os carros, pois todo carro possui uma marca ou mesmo uma
cor. Assim, é natural que ao de nirmos uma classe, por exemplo, CarroDe-
Corrida, ela possua um atributo ou no caso, uma variável contextualizada
destinada a armazenar sua marca e sua cor.
Podemos de nir os atributos como “variáveis da classe que podem ser
de tipos primitivos ou de outras classes destinadas a manter os dados dentro
de um contexto”. A de nição de um atributo dentro de uma classe Java é
feita da mesma maneira como em uma declaração de variável, sendo de nido
o seu tipo e nome, que deve indicar qual seu propósito. Considere o exemplo
da classe CarroDeCorrida a seguir.
//Classe CarroDeCorrida.java
package fabrica;
Capítulo 2 - Programação orientada a objetos 39
2.1.3 Métodos
//Classe ContaCorrente.java
package banco;
// Classe CarroNovo.java
package fabrica;
// métodos
public void andar() {
novoMotor.ligar();
System.out.println(“ANDANDO”);
}
public void parar() {
novoMotor.desligar();
System.out.println(“PARANDO”);
}
}
Capítulo 2 - Programação orientada a objetos 43
_____________________________________________________
__
// Classe Motor.java
package fabrica;
// métodos
public void ligar() {
ignicao = true;
System.out.println(“Ligado”);
}
public void desligar() {
ignicao = false;
System.out.println(“Desligado”);
}
}
// Classe ProgramaPrincipal.java
class ProgramaPrincipal{
public static void main (String arg []){
Mensagem m = new Mensagem();
m.imprimir();
}
}
// Classe Mensagem.java
class Mensagem{
public void imprimir(){
System.out.println(“Mensagem”);
}
}
Exemplo:
CarroDePasseio mercedez = new CarroDePasseio();
Mensagem m = new Mensagem();
// Classe Carro.java
package concessionaria;
import concessionaria.Pessoa;
// métodos
public void mostrarVelocidadeMaxima(){
proprietario.dirigir();
System.out.println(velocidadeMaxima);
}
}
______________________________________________________
// Classe Pessoa.java
package concessionaria;
Mas, quando falamos de objeto, o que realmente está por trás disso é
outra importante característica da orientação a objetos, no caso, o reuso do
código. Mais uma vez fazendo referência ao exemplo do carro, a mesma clas-
se pode ser utilizada para de nir vários objetos do mesmo tipo, sendo que
somente os dados referentes às características de cada um diferem.
Por exemplo, poderíamos ter um objeto denominado carroDePasseio e
outro instanciado com sua referência sendo carroDeCorrida. Ambos podem
ser instâncias da classe Carro, sendo que os dois objetos são oriundos da
mesma classe, diferenciados apenas pelos valores associados aos atributos
que cada um assume. Porém, ambos utilizam o mesmo modelo, mais especi-
camente, a classe Carro.
Cabe ainda destacar outros detalhes da instanciação de objetos. Ago-
ra que já sabemos como os objetos são criados, com a utilização do operador
new, é importante entender o que acontece quando criamos esses objetos.
Capítulo 2 - Programação orientada a objetos 47
//Classe Carro.java
package concessionaria;
import concessionaria.Pessoa;
//métodos
public void mostrarVelocidadeMaxima(){
proprietario.dirigir();
System.out.println(velocidadeMaxima);
}
}
___________________________________________________
//Classe Pista.java
package concessionaria;
3.1 Construtores
// Classe Carro.java
package conceitos;
// métodos construtores
public Carro(){
this.chave = true;
}
// métodos funcionais
public void ligar() {
Capítulo 3 - Construtores, destrutores e encapsulamento 53
chave = true;
System.out.println(“Ligar”);
}
public void desligar() {
chave = false;
System.out.println(“Desligar”);
}
}
3.3 Encapsulamento
// Classe Carro.java
package conceitos;
// método construtor
public Carro(){
setChave(true);
}
public Carro(Boolean chave){
setChave(chave);
}
// métodos de encapsulamento
private void setChave(Boolean status){
this.chave = status;
}
// métodos de funcionamento
public void ligar() {
setChave(true);
System.out.println(“###LIGADO###”);
}
public void desligar() {
setChave(false);
System.out.println(“###DESLIGADO###”);
}
// método destrutor
chave = null;
}
}
não fazem mais referência direta aos atributos, como ocorria nos outros
exemplos apresentados até aqui. Algumas partes do código devem ser cita-
das. Note que o atributo-chave passou a ser declarado como privado, evitan-
do o acesso de qualquer outra classe diretamente a ele. Foram implementa-
dos os métodos set e get, que garantem o encapsulamento dos atributos, no
caso, as interfaces
garantimos de acesso
que qualquer para a inserção
requisição de valores
desse atributo devee ser
recuperação. Assim,
realizada através
dos métodos get e set de nidos para o atributo.
Nesta nova contextualização, os atributos devem obrigatoriamente ser
acessados por meio de métodos. Os métodos set são utilizados para atribuir
valores e os métodos get para a recuperação dos valores atuais dos atributos.
Isso consiste em uma boa prática de programação que deve ser inserida em
seu cotidiano, ainda mais no que tange à programação Java.
Vamos a mais um exemplo para demonstrar os vários conceitos vistos
até aqui. ranscreva o programa a seguir e execute-o, conforme já foi realiza-
do em vários exemplos dos Capítulos 1 e 2.
// Classe Carro.java
package conceitos;
import java.util.Scanner;
// métodos construtores
public Carro(){
setChave(true);
}
public Carro(Boolean chave){
setChave(chave);
}
// métodos de encapsulamento
private void setChave(Boolean status){
this.chave = status;
}
60 JAVA com Orientação a Objetos
// métodos de funcionamento
public void ligar() {
setChave(true);
System.out.println(“###LIGADO###”);
}
public void desligar() {
setChave(false);
System.out.println(“###DESLIGADO###”);
}
// método destrutor
chave = null;
}
// método executável
public static void main(String[] args){
Scanner scn = new Scanner(System.in);
Carro novoCarro = new Carro();
switch(opcao){
case 1: novoCarro.ligar();
break;
case 2: novoCarro.desligar();
break;
}
}
}
Capítulo 3 - Construtores, destrutores e encapsulamento 61
4.1 Herança
// Classe SuperClasse.java
public class SuperClasse{
//atributos e métodos da superclasse
}
// Classe SubClasse.java
public class SubClasse extends SuperClasse{
//atributos e métodos da subclasse
}
// Classe Pessoa.java
package consultorio;
// métodos
public void setNome(String newNome){
this.nome = newNome;
}
public void setEndereco(String newEndereco){
this.endereco = newEndereco;
}
public String getNome(){
return this.nome;
}
public String getEndereco(){
return this.endereco;
}
public void andar(){
System.out.println("Estou andando");
}
}
// Classe Medico.java
package consultorio;
// métodos
public void setHorario(String newHorario){
this.horario = newHorario;
}
public void setEspecialidade(StringnewEspecialidade){
this.especialidade = newEspecialidade;
}
public String getHorario(){
return this.horario;
}
public String getEspecialidade(){
return this.especialidade;
}
}
// Classe Consultorio.java
package consultorio;
import java.util.Scanner;
// entrada de dados
System.out.println("#####Cadastro Clinico#####");
System.out.println("Entre com o nome do médico:");
novoMedico.setNome(scn.next());
System.out.println("Entre com o endereço do” +
“médico:");
novoMedico.setEndereco(scn.next());
System.out.println("Entre com o horario do” +
“médico:");
novoMedico.setHorario(scn.next());
System.out.println("Entre com a especialidade do” +
”médico:");
novoMedico.setEspecialidade(scn.next());
//impressão dos dados obtidos e mantidos para o
//objeto
System.out.println("\n####DADOS DO MÉDICO####");
System.out.println("Nome do médico:"+novoMedico.
getNome());
System.out.println("Endereço
do médico:"+novoMedico.
Capítulo 4 - Herança, polimor smo e interface 69
getEndereco());
System.out.println("Horáriodo médico:"+novoMedico.
getHorario());
System.out.println("Especialidade:"+novoMedico.
getEspecialidade());
}
}
4.2.1 Sobrecarga
// Classe Carro.java
package fabrica;
// métodos
public void setCombustivel(Combustivel
newCombustivel){
this.combustivel = newCombustivel;
}
public Combustivel getCombustivel(){
return this.combustivel;
}
Capítulo 4 - Herança, polimor smo e interface 71
4.2.2 Cast
O cast é a forma mais comum de conversão de tipos, porém sua utili-
zação possui algumas peculiaridades que devem ser observadas na hora da
72 JAVA com Orientação a Objetos
utilização do recurso. O cast no Java pode ser realizado de duas formas, con-
siderando a conversão dos tipos, sendo: implícito e explícito. Estes recursos,
por sua vez, estão geralmente associados à utilização do conceito de herança,
no qual, como vimos, uma classe- lho (subclasse) é semelhante à classe-pai
(superclasse), da qual foram herdados os atributos e os métodos.
plícito.É Neste
deste ponto que podemos
caso, toda subclasse partir para
pode ser o entendimento
associada do cast
à declaração im-
de uma
superclasse. Esta é a forma mais simples, pois não há a necessidade de utili-
zação de nenhum recurso adicional para ser efetuado, sendo apenas descrito
por meio da declaração convencional de um objeto da classe-pai e do método
construtor da classe- lho. Para ter uma melhor visualização, vamos a um
exemplo.
Em nosso
-pai, porém ele éexemplo, o objeto
‘construído’ comoésendo
declarado como
do tipo dauma instância
classe lho, oudaseja,
classe-
re-
cebe uma área de memória referente à subclasse. Note que há uma conversão
natural, pois ambos são semelhantes devido ao processo de herança. Gros-
seiramente, poderíamos dizer que isso é possível, pois a classe- lho pode ser
hierarquicamente inferior à classe-pai, conhece e sabe que ela própria é do
tipo superclasse e, portanto, não precisa necessariamente ser informada que
será convertida. Isto é feito no momento em que utilizamos a palavra extends
na classe- lho, ou seja, a herança.
Já o cast em sua forma explicita, é denominado assim, pois é necessá-
ria a informação para a Máquina Virtual Java de qual classe se deseja fazer a
conversão, no caso o cast. Neste caso, de uma classe-pai, tenta-se convertê-
-la em uma classe- lho. Porém, ao fazer novamente uma análise hierárquica
para ter um melhor entendimento, a superclasse não sabe e em momento
algum é informada quais são suas classes- lho. Portanto, é necessário infor-
mar explicitamente em qual tipo de classe- lho a instância da classe-pai será
convertida. Então, caro leitor, aqui o convido a veri car como isso pode ser
realizado na linguagem Java, observando a sintaxe no exemplo a seguir.
...
public void encherTanque(Combustível c){
if(c instanceof Alcool){
abastecer((Alcool) c);
}else{
abastecer((Gasolina) c);
}
}
...
Outro exemplo que pode ser citado para o polimor smo é a sobrecarga
dos métodos construtores, onde são de nidos diversos métodos com o mes-
mo nome, porém com assinaturas diferentes. ais considerações já foram
feitas em nosso
tores para terceiro
uma classe, capítulo,
pois, no qual
conforme visto,deuma
nimos
vez dois métodos
declarado um constru-
constru-
tor, qualquer que seja sua assinatura, passa a ser obrigatória a de nição do
método construtor default para sua utilização, já que o método construtor
fornecido pela JVM deixará de ser fornecido.
// Classe Medico.java
package consultorio;
// métodos
public void setHorario(String newHorario){
this.horario = newHorario;
}
public void setEspecialidade(String newEspecialidade)
{
this.especialidade = newEspecialidade;
}
public String getHorario(){
return this.horario;
}
public String getEspecialidade(){
return this.especialidade;
}
public void andar(){
System.out.println("Estou andando rápido");
}
}
Medico, não foi necessária sua reescrita na classe lho, ou seja, na classe Me-
dico. Porém, devido às características especí cas da classe Medico, esse mé-
todo é rede nido e, então, passa a atender as particularidades dessa classe.
Assim, a máquina virtual Java entenderá que ao ser invocado um método, no
qual houve o processo de rede nição, o método da subclasse será o que deve
ser acionado.
conceito Caro leitor,
de polimor smoacredito que até aqui
é importantíssimo você
para deve ter veri
o paradigma cado que o
de orientação
a objetos, assim como os demais mecanismos de abstração de dados, herança
e encapsulamento já apresentados.
4.3 Interface
construindo, desta forma, uma espécie de planta baixa do sistema para pos-
sibilitar a construção baseada nos modelos existentes, de nindo assim uma
camada extra de abstração para seu sistema que servirá de base para o res-
tante. O código a seguir apresenta a sintaxe para a de nição de interfaces
nos Java.
// Interface Aluno.java
package escola;
// Classe AlunoImp.java
package escola;
// métodos
return nota1(nota1)+nota2(nota2)/2;
}
public int faltas(){
return faltas;
}
this.nota1 = nota;
return nota1;
}
this.nota2 = nota;
return nota2;
}
}
mais clara. Imagine uma classe que utiliza uma determinada interface que
disponibiliza os métodos abstratos para a conexão com um banco de dados.
Assim, existem diversas formas de implementar uma conexão. Logo, po-
demos ter uma interface que de na todas as maneiras como uma conexão
pode ser implementada, cabendo ao desenvolvedor plugar o método que lhe
for maisuma
grama, conveniente, isso sem
vez que todas a necessidade
as classes de alterações
que implementam taldrásticas
interfaceno pro-a
para
conexão, de alguma maneira, deverá comprometer-se a fornecer todos os
métodos, como em um contrato, independentemente da forma como será
implementado cada método.
Vamos a outro exemplo clássico e bem simples para o entendimento da
ideia de plugabilidade, que é elemento central em vários padrões de projetos
utilizados. Pois bem, imagine uma empresa de software que possui um pro-
grama de controle médico. Este pode ser aplicado tanto a clínicas para tratar
pessoas quanto a clínicas veterinárias. al sistema é relativamente simples e
realiza apenas o controle de pacientes. Veri cando o funcionamento de am-
bas as clínicas, os processos são idênticos, apesar de lidar com pacientes com-
pletamente diferentes.
os casos. Mas, como? NoResumindo, o sistema
caso, poderia pode
ser criada umaser utilizado
interface em ambos
Paciente que
de niria os métodos comuns aos pacientes, restando as classes que imple-
mentam tal interface. Então, observe o código a seguir.
// Interface Paciente.java
package clinica;
// Pessoa.java
package clinica;
// Métodos
public void setNome(String nome) {
this.nome = nome;
}
public void setHistorico(String historico) {
this.historico = historico;
}
public String getNome(){
return nome;
}
public String getHistorico(){
return historico;
}
}
// Animal.java
package clinica;
// Métodos
public void setNome(String nome) {
this.nome = nome;
Capítulo 4 - Herança, polimor smo e interface 81
}
public void setHistorico(String historico) {
this.historico = historico;
}
public String getNome(){
return nome;
}
public String getHistorico(){
return historico;
}
}
// Imprimindo os relatórios
82 JAVA com Orientação a Objetos
Isso nos garante uma padronização nos processos, fazendo com que
outras funcionalidades do sistema possam ser utilizadas de forma extensível
a vários produtos. No nosso caso especí co, a vantagem de utilizar a interface
Paciente se exemplo,
latório, por caracterizaria
comona utilização dosnoprocedimentos
é apresentado código a seguirde
e jágeração de re-
referenciado
no exemplo anterior.
// Relatorios.java
package clinica;
// Carro.java
package estaleiro;
// Barco.java
package estaleiro;
public interface Barco {
public void navegar();
}
Feito isso, agora é necessário criar a nossa classe CarroAn bio que
irá implementar as interfaces propostas e com isso, passará a ser obrigada
a reescrever os métodos propostos nas interfaces. Assim, vamos ao que
interessa. ranscreva o código a seguir e analise sua utilização.
84 JAVA com Orientação a Objetos
package estaleiro;
String s = “Palavra”;
String s1 = new String();
String s2 = new String(“Palavra”);
Repare que tudo que foi apresentado no quadro anterior não é novida-
de. Vários exemplos já apresentados a você, leitor, nos demais capítulos ze-
ram menção a alguma das possibilidades de criação ou instanciação de obje-
tos da classe String. É vital para seus programas que o objeto seja construído
com algumas das possibilidades mostradas, garantindo que não ocorra erro
de pontos nulos, sem uma referência de memória.
Amigo leitor, como você deve ter percebido, a classe String fornece di-
versas possibilidades que podem tornar a vida do programador mais fácil.
Outros métodos da classe String poderiam ser considerados aqui. Assim, ca
como dica que você veri que na documentação o cial da classe String as de-
mais possibilidades para a manipulação das strings.
Porém, nem só de strings vive um programa, outras classes devem ser
consideradas como elementos comuns e interessantes para o cotidiano de
um desenvolvedor Java. Entre tais classes, podemos citar as classes que auxi-
liam na manipulação de datas e horas, sendo nosso próximo assunto.
// ExemploData.java
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.GregorianCalendar;
dd/MM/yy = 21/08/11
dd/MMM/yyyy = 21/AGO/2011
// Data.java
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.GregorianCalendar;
// DataFormatada.java
import java.text.DateFormat;
import java.util.Locale;
import java.util.Date;
// ExemploDataCalendar.java
import java.text.DateFormat;
import java.util.Calendar;
import java.util.Date;
...
calendario.set(ano,mês,dia);
calendario.set(ano,mês,dia,hora,minuto);
calendario.set(ano,mês,dia,hora,minuto,segundo);
...
Porém, nem sempre é interessante utilizar a classe Date, dada sua atu-
al situação, sendo que a própria classe Calendar com a utilização do método
getInstance( ) já fornece todo o suporte necessário para a aquisição da data.
Além disso, o objeto do tipo Calendar, no nosso caso, calendário, pode ser
utilizado para a manipulação dos elementos vinculados à data por meio de
suas constantes, além de realizar, como já dito, operações como, por exem-
plo, a soma ou a subtração dos dias em uma data. Como nos demais tópicos
trabalhados até aqui, vamos a mais um exemplo.
// DataCalendario.java
import java.text.DateFormat;
import java.util.Calendar;
import java.util.Locale;
}
}
// Matematica.java
public class Matematica {
public static void main(String args[]){
// Cálculo do comprimento de um círculo
double comp = 2 * raio * Math.PI;
System.out.println(comp);
// Logaritmo neperiano
System.out.println(Math.E);
}
}
// ComparaValores.java
public class CamparaValores {
public static void main(String[] args) {
System.out.println(“O maior valor é “
+ Math.max(valores1[0], valores1[1]));
System.out.println(“O menor valor é “
+ Math.min(valores1[0], valores1[1]));
}
}
// Hipot.java
public class Hipot{
public static void main(String args[]) {
double p1 = 12;
double p2 = 16;
System.out.println(“
A distancia entre os pontos é “
+ Math.hypot(p1, p2));
}
}
Capítulo 5 - Ferramentas úteis para o dia a dia 95
// NumeroRandomico.java
public class NumeroRandomico {
public static void main(String[] args) {
int valorMin = 0;
int valorMax = 10;
int ranger = valorMax - valorMin;
double valorRandomico;
for (int i = 0; i < 10; i++) {
valorRandomico = Math.random();
System.out.println(“O número entre”
+valorMin+” e “+valorMax+” é:”
+ Math.round(
valorMin + valorRandomico * ranger));
}
}
}
se destaca claramente das outras devido à sua diversidade. Diante isso, outra
ferramenta que deve ser mencionada, entre as diversas que a linguagem Java
disponibiliza, consiste nas classes para o trabalho com vetores.
Em sua maioria, as diversas linguagens de programação disponíveis no
mercado trabalham com vetores convencionais que delimitam um tamanho
xo. Isto
cução, é, impedem
como, que estes
por exemplo, sofram
os que alteração
foram de tamanho
desenvolvidos durante
em nosso a exe-
primeiro
capítulo.
A linguagem Java fornece subsídios adicionais para a manipulação dos
vetores, resolvendo problemas como o citado, no caso, a alteração de tama-
nho durante a execução. Além disso, disponibiliza classes para as operações
de nossos vetores estáticos. Isso tudo obviamente é feito por um conjunto
de classes.
// Classe ExemploVector.java
import java.util.Vector;
if(!vetor.isEmpty()){
for (int i = 0; i < vetor.size(); i++) {
Object object = vetor.elementAt(i);
}
System.out.println(vetor.size());
}
}
}
No exemplo
diferentemente dosanterior,
vetoresum detalhe a ser
trabalhados atéobservado
aqui, não está no fatoodetama-
de nimos que,
nho de nosso vetor para a variável ‘vetor’. Isso graças à capacidade da classe
Vector que determina o tamanho a ser alocado durante a execução, sendo
que isso é ideal para a manipulação de grandes vetores, bem como estruturas
heterogêneas. Por ser uma classe, Vector disponibiliza para seus objetos, no
caso, vetores especiais, funcionalidades que não são comuns aos vetores tra-
dicionais, tais como, a veri cação do tamanho do vetor ou mesmo se eles es-
tão vazios, conforme foi apresentado no exemplo, através dos métodos size( ) e
isEmpty( ).
Entretanto, isto não elimina um dos maiores problemas do trabalho
com vetores, que é sua navegação e busca. Imagine um vetor que cresce e tem
um tamanho de um milhão de posíções. No caso, isso tornaria o processo
de busca computacionalmente inviável, já que para encontrar um elemento,
seria necessário percorrer o vetor. Isto se torna mais crítico, caso o objeto
procurado esteja no nal do vetor.
Para solucionar esse problema, a linguagem Java fornece outra classe
para o trabalho com vetores - a HashMap.
98 JAVA com Orientação a Objetos
// Classe NovoVetor.java
import java.util.HashMap;
A classe Array, como pode ser observado, consiste em uma classe que
manipula vetores estáticos. Além disso, é uma classe abstrata que não precisa
ser instanciada para a utilização, sendo utilizada sua própria referência. Ela,
como já dito, possui uma série de métodos, entre eles, provê o método sort( )
que foi utilizado no exemplo, responsável por ordenar o array passado como
parâmetro, realizando internamente um mecanismo de comparação entre as
strings e ordenando-as.
Note que utilizamos o atributo length para que a impressão ordenada
dos nomes fosse realizada através da estrutura de repetição for. Isto abre
espaço para que seja comentado que mesmo os vetores sendo estruturas es-
táticas, estes possuem alguns atributos e métodos que auxiliam em sua ma-
nipulação, como, por exemplo, o método equals( ).
Com isso, chegamos ao nal de maisum capítulo. Nosso próximo com-
promisso é a necessidade de trabalharmos com o tratamento de exceções no
Java, o que nos abrirá caminho para elementos mais avançados, tais como, o
trabalho com arquivos ou a manipulação de streams.
Capítulo 6
ratamento de exceções e entrada de dados
-
-
-
-
...
try{
...
// trecho do código a ser executado
}catch(Classe que trata a excecao){
...
// tratamento da exceção
}
...
Um detalhe
tirem quantas importante
cláusulas a ser considerado
catch forem necessáriasestá
paranao possibilidade de exis-
melhor desempenho
da aplicação. Isto se deve ao fato de poderem existir vários tipos de possíveis
exceções e obviamente, é interessante que exista um tratamento especí co
para cada um desses gargalos do que, por exemplo, apenas um tratamento
generalista que possa vir a comprometer sua recuperação e continuídade na
execução do programa.
Além disso, podem ocorrer situações nas quais é necessária a execução
de alguma tarefa ou instrução, ocorrendo ou não uma falha no trecho de
código principal, ou seja, com o perfeito funcionamento da aplicação ou não.
Aqui, entra em cena a cláusula nally, na qual é de nido o bloco de código
que será executado havendo ou não o lançamento de uma exceção. Sua utili-
zação deve ocorrer após a declaração das cláusulas try e catch. Assim, temos
uma nova estrutura para o tratamento das exceções nos Java, como apresen-
tado no trecho a seguir.
...
try{
...
// trecho de código a ser executado
104 JAVA com Orientação a Objetos
Classe Função
Bom pessoal, assim como qualquer classe, as de exceção devem ser im-
portadas
capítulos para a utilização
trabalhados até dentro de um
aqui, nada programa.
como Como alguns
implementar feito nos demais
exemplos
para a xação dos novos e essenciais conceitos da linguagem Java vistos em
nosso sexto capítulo. Assim, transcreva o código observando a utilização das
cláusulas para o tratamento de exceções, então ao nal, execute o programa
para visualizar o resultado.
// Classe Excecao.java
public class Excecao{
public static void main(String[] args){
int a = 20;
int b = 0;
int c = 0;
try{
c = a/b;
}catch(ArithmeticException e){
System.out.println(“Problemas na operação”);
System.out.println(e);
}
106 JAVA com Orientação a Objetos
}
}
}
6.1.1 Trows
...
tipoDeRetorno nomeDoMetodo() throws ClasseDeExcecao1,
ClasseDeExcecao2, ...{
// corpo do método
}
...
Capítulo 6 - ratamento de exceções e entrada de dados 107
Aqui, cabe dizer que a única diferença entre as duas sintaxes apresen-
tadas é que as cláusulas try/catch de nem seu bloco de código que será tra-
tado, caso ocorra alguma exceção. A cláusula throws, por sua vez, é sempre
de nida para um método de uma classe, logo, a qualquer momento dentro do
método ao ocorrer um erro, as classes de nidas são executadas para tratá-lo.
Vamos a um exemplo para o conceito apresentado.
// Classe ExcecaoThrows.java
public class ExcecaoThrows{
public static String divisao(int a, int b)throws
ArithmeticException{
return “O valor da divisão é “ + a/b;
}
// ManipulacaoDados.java
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class ManipulacaoDados {
public static void main(String args[]){
String dados = new String();
BufferedReader entr = new BufferedReader(
new InputStreamReader(System.in));
try {
System.out.println(“Entre com a sua frase:”);
dados = entr.readLine();
System.out.println(“A
frase digitada foi:”+dados);
} catch (IOException e){
System.out.println(“Erro ao ler string”);
e.printStackTrace();
}
}
}
Você deve estar perguntando: Mas, por que isso não foi apresentado
antes? No caso, esta metodologia de entrada de dados não foi demonstrada
anterioremente, pois necessitava do tratamento de exceções, uma vez que
estamos lidando com alguns elementos critícos, tais como, a manipulação de
streams, buffer, e isso nos força a lidar com um tratamento prévio dos riscos
que podem ser impostos à nossa aplicação.
Capítulo 6 - ratamento de exceções e entrada de dados 109
Entendendo o que foi feito em nosso exemplo, veri que que inicial-
mente foi declarada uma variável de dados do tipo String, que receberá os
valores oriundos do teclado. Para isso, no entanto, foi necessária a utiliza-
ção dos objetos da classe BufferedReader e InputStream. A primeira, como
mencionado, apenas armazena os dados oriundos do teclado, obtidos por
meio da InputStrem,
do sistema, no caso, o que é responsável
teclado, porSystem.in.
por meio de recuperarOosmétodo
dados readLine(
de entrada),
do objeto da classe BufferedReader, faz com que o sistema passe a esperar a
entrada de dados e armazená-los na memória durante a execução.
Encerrando este capítulo, vale resaltar que as duas classes citadas nes-
ta seção também são úteis para a manipulação de arquivos, característica
essa que consideraremos em nosso próximo capítulo.
Capítulo 7
Manipulação de arquivos de texto
Bom pessoal, chegamos ao nosso último capítulo e para nalizarmos
os conceitos e as tecnologias introdutórias da tecnologia Java, nada como
aprendermos a criar, realizar a entrada e a leitura de dados nos arquivos tex-
to. Os conceitos trabalhados até aqui nos demais capítulos serão essenciais
para uma melhor compreensão dos conceitos relacionados ao trabalho com
arquivos, principalmente os referentes ao tratamento de exceções, conside-
rados no capítulo anterior.
Estudar a manipulação de arquivos é de extrema importância, pois
geralmente todas as aplicações trabalham com algum tipo de persistência
de dados, uma vez que todos os exemplos realizados e apresentados até aqui
somente fazem uso da memória volátil de seu computador. Ou seja, todos os
dados são perdidos assim que nalizamos nossa aplicação,como você já deve
ter percebido.
Diante de tais fatos, a maneira mais básica e simples de realizar a per-
sistência dos dados é por meio da utilização de arquivos. Isso possibilita que
as informações das aplicações possam ser recuperadas após sua nalização,
abrindo novas possibilidades para seus programas. Obviamente, existem
formas mais pro ssionais de manter os dados, como, por exemplo, a utiliza-
ção de Sistemas Gerenciadores de Banco de Dados (SGBD), mas, em diversos
momentos, a manipulação de arquivos é útil e interessante, mantendo, na
maioria das vezes, neutralidade dos dados. Neste primeiro livro, não iremos
abordar a manipulação do banco de dados, uma vez que o objetivo aqui é
fazer com que este livro seja um referencial para as disciplinas introdutórias
de programação.
A tecnologia Java fornece diversas classes e com isso, formas para o
trabalho com arquivos, no caso, a criação, armazenamento e recuperação de
dados. Então, vamos apreciá-las.
7.1 Arquivos
7.2 Entradas
// LerArquivo.java
import java.io.IOException;
import java.io.FileReader;
import java.util.Scanner;
System.out.println(linha);
}
}
}
114 JAVA com Orientação a Objetos
7.3 Saídas
// EscreverArquivo.java
import java.io.IOException;
import java.io.PrintWriter;
Capítulo 7 - Manipulação de arquivos de texto 115
// CriandoArquivo.java
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Scanner;
7.4 Streams
importante a ser colocado aqui é o fato de que assim como nas classes
FileReader e PrintWriter, já vistas, para as classes que auxiliam na manipulação
de streams também é necessária a utilização do tratamento de exceção. Para
ter uma melhor compreensão do que foi considerado, veja o exemplo a seguir
e execute-o.
// Classe ExemploStream.java
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
try {
saida = new FileOutputStream(“dados.txt”);
saida.write(1010);
entrada= new FileInputStream(“dados.txt”);
System.out.print(entrada.read());
} catch (IOException e) {
e.printStackTrace();
}
}
}
// Aleatorio.java
import java.io.IOException;
import java.io.RandomAccessFile;
// Classe Aleatorio.java
import java.io.IOException;
import java.io.RandomAccessFile;
} catch (IOException e) {
e.printStackTrace();
}
}
}
Block, Joshua. Java Efetivo - 2ª Edição. Rio de Janeiro: Alta Books, 2008.
Furgeri, Sergio. Java 7 - Ensino Didático. São Paulo: Editora Érica, 2010.
Sierra, Kathy; Bates, Bert. Use a Cabeça Java. Rio de Janeiro: Alta Books,
2005.
Apêndice I
Instalação do Sdk e Con guração das Variáveis de
Ambiente (Windows Xp)
Para o download do J DK, siga os seg uintes passos:
6. la para obasta
Depois, download do arquivo.
seguir as orientações do software no momento de
sua instalação.
3. Clique em Nova.
126 JAVA com Orientação a Objetos
6. Clique em OK.
9. Clique em OK.
Para que você tenha certeza dos efeitos das mudanças, reinicie o
sistema.
Apêndice II
JAVADOC
1. Inicialmente, é necessário realizar o comentário de documentação
em sua classe de nindo e seguindo os elementos de nidos pela tecnologia
Java. Existem diversas tags especiais de nidas pela tecnologia, que auxiliam
na de nição de informações importantes e na formatação padrão, tais como,
@author, @see e @return. Veja o exemplo:
/**
* @see java.lang.Object
* @author Alex Coelho
*/
public class Carro{
public String cor;
public String marca;
public String modelo;
/**
* Construtor Carro
* @param Carro
* @throws Sem Exceções
*/
public Carro(Carro novo){
this.cor = novo.cor;
this.marca = novo.marca;
this.modelo = novo.modelo;
}
/**
* Método andar que imprime
* o valor String na tela
* @see java.lang.String
130 JAVA com Orientação a Objetos
*/
protected void andar(){
ligar();
System.out.println(“Carro andando”);
}
/**
* Método parar que imprime
* o valor String na tela
* @see java.lang.String
*/
protected void parar(){
System.out.println(“Carro parado”);
}
/**
* Método ligar que imprime
* o valor String na tela
* @see java.lang.String
*/
private void ligar(){
System.out.println(“Carro ligado”);
}
}
javadoc NomeDaClasse.java
Veja o funcionamento:
Apêndice II 131
Se tudo correu conforme o esperado, você deve ter acesso a uma pági-
na html na mesma pasta onde se encontra sua classe, como é demonstrado
a seguir.