Uma classe abstrata não pode ser instanciada. No entanto, ela pode ser utilizada por outras classes em relações de herança.
Um método abstrato não tem código implementado e deve ser implementada pela classe filha.
Para referência, ver
https://docs.oracle.com/javase/tutorial/java/IandI/abstract.html
Considere o seguinte código:
abstract class Figura {
double x;
double y;
Figura(double x, double y) {
this.x = x;
this.y = y;
}
abstract double area();
}
class Retangulo extends Figura {
Retangulo (double a, double b) {
super(a, b);
}
double area() {
return x * y;
}
}
class Triangulo extends Figura {
Triangulo(double a, double b) {
super(a, b);
}
double area() {
return x * y / 2;
}
}
Com relação ao código acima, responda as seguintes perguntas:
- O que ocorre se tentarmos instanciar um objeto da classe Figura?
- Escreva um programa para testar as classes Quadrado e Triangulo.
- Implemente uma nova classe chamada Circulo, escreva o método área de maneira apropriada e teste.
- O construtor da classe Figura é chamado quando se instancia um objeto do tipo Quadrado ou Triangulo?
- Inclua na classe Figura um método abstrato declarado da seguinte forma: "abstract double perimetro();". O objetivo é retornar o perímetro da figura.
Implemente os métodos correspondentes nas classes Quadrado, Triangulo e Circulo, e escreva um programa para testar.
- Uma classe não abstrata pode possuir métodos abstratos? Escreva um programa para testar.
Uma interface é uma definição de um grupo de métodos relacionados, mas sem a especificação do código dos métodos.
Quando uma classe implementa uma interface, ela obrigatoriamente tem que definir o código para todos os métodos especificados na interface.
Uma classe pode implementar diversas interfaces.
A interface é utilizada como um compromisso da classe sendo implementada.
Para referência, ver
https://docs.oracle.com/javase/tutorial/java/concepts/interface.html
Considere o seguinte código:
public interface Frases {
public String saudacao();
public String mensagem();
public String despedida();
}
class Professor implements Frases{
public String saudacao()
{
return("Bom dia. ");
}
public String mensagem()
{
return("Estude sempre. ");
}
public String despedida()
{
return("Até logo. ");
}
}
public class Skatista implements Frases {
public String saudacao()
{
return("Das qualé! Firmeza?");
}
public String mensagem()
{
return("Vou tirar uns flips na moral seus polenta! ");
}
public String despedida()
{
return("Vô pegá o busão. ");
}
}
Com relação ao código acima, responda as seguintes perguntas:
- É possível inserir um construtor na interface?
- A interface é usada como uma classe, ou seja, agrupando atributos e métodos que definem um tema? Descreva por que sim ou não.
- Implemente um programa teste para a classe Professor e Skatista e faça a impressão dos métodos saudacao(), mensagem() e despedida().
- Modifique a implementação dos métodos saudacao(), mensagem() e despedida () de modo a escolher um conjunto de frases randomicamente, e implemente um teste realizando uma conversa entre Professores e Skatistas.
- Implemente uma classe Estudante que implementa a interface Frases, utilizando também um conjunto de frases pré-definidas. Teste com uma conversa entre Professores-Estudantes e Skatistas-Estudantes.
- Descreva quando deve ser utilizada uma classe abstrata e uma interface.
Pacotes são utilizados em Java para organizar as classes disponíveis para uso, além de prevenir conflitos de nomes e permitir o controle de acesso.
Alguns pacotes importantes existentes são:
- java.lang: classes fundamentais.
- java.io: classes utilizadas para entrada e saída.
- java.awt: classes para interface gráfica.
- java.net: classes para comunicação em redes.
Para referência, ver
http://www.tutorialspoint.com/java/java_packages.htm
Considere o seguinte código:
//---------------------------------
// Arquivo: Livro.java
package pacotelivro;
public class Livro
{
private String titulo;
private String autor;
public Livro(String titulo, String autor)
{
this.titulo = titulo;
this.autor = autor;
}
public void show()
{
System.out.println(titulo+" "+ autor);
}
}
//---------------------------------
// Arquivo: TestePacoteLivro.java
import pacotelivro.*;
class TestePacoteLivro
{
public static void main(String[] args)
{
Livro l = new Livro("java","Deitel");
l.show();
}
}
Com relação ao código acima, responda as seguintes perguntas:
- Compile a classe Livro.java, crie um diretório abaixo do diretório onde estão os fontes chamado "pacotelivro". Copie o arquivo Livro.class para este diretório. Compile e execute o programa TestePacoteLivro
- Anote: o que significa "import pacotelivro.*"?
- Anote: como a linguagem Java utiliza a variável de ambiente CLASSPATH?
- Exercício: implemente o pacote "Animal", conforme sugerido pelo exemplo disponível em http://www.tutorialspoint.com/java/java_packages.htm, incluindo a interface "Animal" e as classes "Mamifero", "Peixe" e "Ave". Implemente um programa teste para utilizar a interface.