1ª Lista de Exercícios - Linguagem Java (Intermediário)
Instruções: Para cada uma das questões, entenda, analise, elabore uma solução e a implemente em Java.
Sempre que necessário pesquise no material didático fornecido, na bibliografia sobre o tema e na Web, ou
solicite ajuda ao professor.
class Pessoa {
private String nome;
public Pessoa(String nome) {
this.nome = nome;
}
public String toString() {
return "Nome: " + nome;
}
}
1.
Com base na classe Pessoa acima, reutilizando-a por meio de herança, crie uma classe Aluno, que declare: (a)
uma variável de instância matrícula; (b) um construtor que inicialize o nome e a matrícula com base em seus
parâmetros; e (c) um método toString() que retorne uma String contendo a matrícula e o nome do aluno.
class Aluno extends Pessoa {
private int matricula;
public Aluno(String nome, int matricula) {
Super(nome)
this.matricula = matricula;
}
public String toString() {
return super.toString() + "\nMatrícula: " + matricula;
}
}
2.
Quais as formas de reuso de classes estudadas? Cite as principais diferenças e semelhanças e dê exemplos.
Semelhanças:
Delegação e Herança são formas de reuso de classes, permitindo a associação entre classes.
Diferenças:
Característica
Delegação
Herança
Tipo
Tem-um ou tem-vários
É-um
Implementação
Declaração de variável de
instância como variável de
referência (o tipo é uma classe)
Pode haver várias delegações em
uma classe
Uso da palavra extends seguido
do nome da superclasse
Quantidade
Só pode haver uma superclasse
direta para cada classe
Exemplos:
A classe Aluno herdou (ou estendeu) a classe Pessoa: Aluno é uma Pessoa.
A classe Pessoa delegou (se associou) à classe String a manipulação dos caracteres no nome: Pessoa tem um
nome.
3.
Quais são os quatro níveis de acesso e quais modificadores são usados para cada um? Com funcionam as
restrições impostas por modificadores de acesso, quando a delegação é adotada? Exemplifique.
Nível
Modificador de Acesso
Descrição
Público
Public
Dá acesso irrestrito a partir de
qualquer classe, em qualquer
pacote. Se o pacote for outro, deve
haver uma instrução import para a
classe a ser usada ou o nome da
classe deve ser completamente
qualificado.
Protegido
protected
Dá acesso irrestrito às classes do
mesmo pacote e às classes filhas
para acesso às variáveis herdadas.
De Pacote ou padrão
Não há modificador
Dá acesso irrestrito às classes do
mesmo pacote.
Privado
Private
Restringe o acesso à própria classe.
Quando há delegação, ou mesmo herança, os modificadores de acesso devem ser considerados em conjunto.
Exemplos:
Na classe Pessoa, o nome foi definido como privado e só pode ser acessado da própria classe Pessoa. Se
tivesse sido definido como de pacote, isto é, sem nenhum modificador de acesso, poderia ser acessa a partir
de todas as classes do mesmo pacote. Se tivesse sido declarado como protegido, poderia ser acessado da
própria classe Pessoa e também de suas subclasses, como a classe Aluno, e das demais classes localizadas no
mesmo pacote de Pessoa. Se tivesse sido definido como público, o acesso ao nome seria irrestrito.
4.
Aprofunde o estudo sobre delegação, dando um novo exemplo.
Pessoa tem um Endereço; Veículo tem um Proprietário.
5.
Aprofunde o estudo sobre herança, dando um novo exemplo.
Carro é um Veículo; Moto é um Veículo
6.
Defina superclasse e subclasse e dê exemplos.
Superclasse é a classe base (ou classe mãe) que é estendida por outra com objetivo de reutilizar seus
membros (varáveis e métodos). A subclasse é a classe filha, isto é, a que estendeu a superclasse.
7.
O que podemos afirmar sobre construtores? Cite as principais diferenças e semelhanças de um construtor
para um método convencional e dê exemplo.
Trata-se de uma rotina executada quando um objeto é criado.
Diferenças e Semelhanças:
8.
Característica
Construtor
Método
Nome
O mesmo da classe
Qualquer nome válido
Retorno
Não tem (nem void)
Qualquer tipo (primitivo ou classe)
disponível
Parâmetros
Pode ter nenhum, um ou vários
Pode ter nenhum, um ou vários
Execução
Uma vez para cada objeto
Quantas vezes forem necessárias
Acionamento
Na criação de objetos com a De qualquer local de onde o acesso
palavra new ou a partir de outro for permitido.
construtor com as palavras this
(construtor da própria classe) ou
super (construtor da superclasse).
Sobrecarga
Pode ser sobrecarregado
Pode ser sobrecarregado
Sobreposição
Não se aplica
Pode ser sobrescrito
Para a declaração de uma variável de instância x, que permite que x seja acessível DIRETAMENTE a partir de
todas as classes do mesmo pacote e apenas destas, qual modificador de acesso devemos ter? Justifique e
demonstre por meio de um exemplo.
Nenhum.
Exemplo: int x declara uma variável x que pode ser acessada diretamente de todas as classes do mesmo
pacote.
9.
Para a declaração de uma variável de instância y, que permite que y seja acessível DIRETAMENTE a partir de
todas as classes de qualquer pacote, qual modificador de acesso devemos ter? Justifique e demonstre por
meio de um exemplo.
public.
Exemplo: public int y declara uma variável acessível de qualquer outra, localizada em qualquer pacote.
10.
Para a declaração de uma variável de instância y, que NÃO permite que y seja acessível DIRETAMENTE partir
de qualquer outra classe, independente de pacote, qual modificador de acesso devemos ter? Justifique e
demonstre por meio de um exemplo.
private.
Exemplo: private int y declara uma variável acessível apenas da própria classe.
11.
O que é e como se dá a sobreposição de métodos? Qual a diferença para sobrecarga de métodos? O método
toString é um exemplo de sobrecarga ou de sobreposição? Explique.
Na sobreposição, cria-se um método em uma classe filha ou filha da filha, etc. com o mesmo nome, tipo de
retorno e lista de parâmetros de um outro criado em uma classe hierarquicamente superior (mãe, mãe da
mãe, etc.)
Característica
Sobreposição
Sobrecarga
Nome
O mesmo
O mesmo
Parâmetros
O(s) mesmo(s)
Diferentes
Tipo de retorno
O mesmo
Pode ser diferentes ou iguais
Localização
Não pode ser na mesma classe, Pode ser na mesma classe ou
mas abaixo hierarquicamente
abaixo hierarquicamente.
O toString, que é originalmente criado na classe Object, é um exemplo de sobreposição. Cria-se um método
público, que retorne uma String, sem parâmetros, chamado toString.
12.
Explique e dê um exemplo de uso de cada uma das seguintes palavras-chaves: this, super, static.
this: uma referência ao objeto corrente. Exemplo: no construtor da classe Pessoa, usa-se a palavra this para
acessar a variável de instância, visto que há uma variável local defina como parâmetro com o mesmo nome.
super: uma referência à superclasse direta. Exemplo: no método toString de Aluno, há uma chamada ao
método de mesmo nome definido na superclasse.
static: modificador usado para criar membros de classe. Exemplos: se quiséssemos criar uma variável para
armazenar a quantidade de objetos da classe Pessoa, poderíamos definir uma variável estática (ou de classe)
quantidade.
13.
Qual método é usado como ponto de entrada para execução de uma classe? Exemplifique.
public static void main(String[] args) { … }
O método main, da forma como está declarado acima, serve como ponto de entrada para a execução, isto é, a
JVM inicia a execução de uma classe por ele.
Download

1ª Lista de Exercícios - Linguagem Java (Intermediário