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 {
private double x;
private double y;
Figura(double x, double y) {
this.x = x;
this.y = y;
}
abstract double area();
}
class Retangulo extends Figura {
private double xlen;
private double ylen;
Retangulo (double x, double y) {
super(a, b);
this.xlen=xlen; this.ylen=ylen;
}
double area() {
return xlen * ylen;
}
}
class Triangulo extends Figura {
private double base;
private double altura;
Triangulo(double x, double y, double base, double altura) {
super(x, y);
this.base=base; this.altura=altura;
}
double area() {
return base * altura / 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.
O padrão de arquivo JAR permite que diversas classes sejam armazenadas dentro de um único arquivo.
É uma boa solução para distribuição dos programas escritos em Java.
O arquivo resultante pode ser executado diretamente pela máquina virtual, sem a necessidade de extrair os arquivos individuais.
Considere o exemplo anterior, com duas classes: Livro e TesteLivro.
Ambos os arquivos foram compilados para obter os arquivos Livro.class e Testelivro.class.
Para criar um arquivo JAR contendo as duas classes, primeiro deve-se criar um arquivo especial que define em qual classe está o método main, que deve ter o nome definido como "manifest.mf" da seguinte forma:
//---------------------------------
// Arquivo: manifest.mf
Manifest-version: 1.0
Main-Class: TestePacoteLivro
Para criar o arquivo .JAR, utiliza-se o comando:
jar cfm TesteLivro.jar manifest.mf pacotelivro/Livro.class TestePacoteLivro.class
Para executar o programa contido no arquivo .JAR, utiliza-se o comando:
Soluções