MC600 - Segundo semestre de 2003 - LISTA 13 ------------------------------------------- 1. Como se definem classes abstratas em Java? Resposta: Se uma classe tiver um método abstrato ou herdá-lo ela será abstrata. Além disso também é possivel definir uma classe abstrata diretamente colocando-se palavra abstract antes de class. Ex: abstract class Classe{...}. 2. Qual é a utilidade de se ter uma classe abstrata? Resposta: Generalizar conceitos: a classe abstrata deve abrigar operações e atributos comuns a várias classes relacionadas. 3. Um atributo é chamado estático quando é definido através da palavra reservada static. Qual é a diferença entre atributos estáticos e não estáticos? Resposta: Atributo estático: é compartilhado por todas as instancias da classe. Atributo não estático: Cada objeto possui sua própria versão do atributo (não compartilhado). 4. Digamos que a classe Roedores tenha as classes Rato e Camundongo como suas herdeiras. Suponha também que a classe RatoDeLaboratorio seja herdeira da classe Rato. Examine as linhas a seguir: Roedor roedor; Rato rato = new Rato(); Camundongo camundongo = new Camundongo(); RatoDeLaboratorio rdl = new RatoDeLaboratorio(); Qual das linhas abaixo causaria um erro de compilação? Por que? a. roedor = rato; b. roedor = camundongo; c. rdl = null; d. rdl = rato; Resposta: letra d) Está atribuindo a um objeto (rdl) de uma subclasse (RatoDeLaboratorio) um objeto (rato) de uma superclasse sua (Rato). 5. Qual é a diferença entre sobrecarga (overloading em inglês) e polimorfismo em Java? Resposta: Existe polimorfismo quando metodos podem operar sobre uma variedade de tipos. Existe sobrecarga quando há métodos com lista de parâmetros que difiram no número, na ordem, ou no tipo dos parâmetros. 6. Um método é chamado estático quando é definido através da palavra reservada static. Qual é a diferença entre métodos estáticos e não estáticos? Resposta: Métodos estáticos só podem acessar membros estáticos de sua classe. Já os métodos não estáticos podem acessar tanto os membros estáticos quanto os não estáticos de sua classe. Métodos estáticos também podem ser chamados sem haver instâncias da classe. (membro: método ou atributo). 7. É possível definir classes não abstratas herdeiras de uma classe abstrata? Por que? É possível definir um método não abstrato em uma classe abstrata? Por que? 8. Dada a seguinte definição de um método: int compute( int a, double y ){ . . . .} Qual (ou quais) dos seguintes métodos poderiam coexistir com ele na mesma classe? Justifique a resposta para cada um deles. a. int compute( int sum, double value ){ . . . .} b. double compute( int a, double y ){ . . . .} c. double compute( int sum, double y ){ . . . .} d. int compute( int a, int y ){ . . . .} Resposta: a)Não, pois eles possuem a mesma assinatura b)Não, pois para Java eles possuem a mesma assinatura c)Não, mesma justificativa anterior d)Sim, a assinatura é diferente