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.