Buscar

PROGII slide08 heranca

Prévia do material em texto

Programação de Computadores II 
Herança 
Herança 
 Diferentes classes podem ter semelhanças 
• Duas ou mais classes poderão compartilhar os mesmos atributos 
e/ou os mesmos métodos 
 
 Herança permite uma classe mais especializada herdar os 
atributos e os métodos de outra classe menos especializada. 
 
Herança 
Pessoa 
- nome: String 
- idades: int 
+ definirNome(String) 
+ obterNome(): String 
+ definirIdade(int) 
+ obterIdade(): String 
Aluno 
- curso: String 
+ definirCurso(String) 
+ obterCurso: String 
Instâncias de aluno: 
nome: João idade: 25 curso: EPRO 
nome: Maria idade: 20 curso: ECA 
Herança 
 Sintaxe 
class NomeDaSubclasse extends NomeDaSuperclasse { 
 declaração de atributos 
 declaração de métodos e construtores 
} 
 
 Observações importantes 
• Em JAVA, quando a superclasse não é indicada, a classe estende 
java.lang.Object. 
• Construtores não são herdados, porém, um construtor da superclasse 
imediata pode ser invocado pela subclasse. 
 
 
Herança 
 
public class Pessoa { 
 private String nome; 
 public Pessoa(String nome) { 
 this.nome = nome; 
 } 
 public void definirNome(String nome){ 
 this.nome = nome; 
 } 
 public String obterNome() { 
 return this.nome; 
 } 
} 
 
public class Aluno extends Pessoa { 
 private String curso; 
 public Aluno(String nome, String curso) { 
 super(nome); 
 this.curso = curso; 
 } 
 public void definirCurso(String curso) { 
 this.curso = curso; 
 } 
 public String obterCurso() { 
 return this.curso; 
 } 
} 
Herança 
 
 
 
 
 
 
 Palavra-chave: super 
• Permite classes derivadas ou subclasses terem acesso a métodos e 
construtores das superclasses. 
 Reutilização de código. 
• Super x this 
 super refere-se à classe ancestral imediata 
 this refere-se à própria classe 
 
public class Pessoa { 
 private String nome; 
 public Pessoa(String nome) { 
 this.nome = nome; 
 } 
 public void definirNome(String nome){ 
 this.nome = nome; 
 } 
 public String obterNome() { 
 return this.nome; 
 } 
} 
 
public class Aluno extends Pessoa { 
 private String curso; 
 public Aluno(String nome, String curso) { 
 super(nome); 
 this.curso = curso; 
 } 
 public void definirCurso(String curso) { 
 this.curso = curso; 
 } 
 public String obterCurso() { 
 return this.curso; 
 } 
} 
Exercício 
 Altere sua solução do exercício Banco (exercício 2) para que seu projeto permita a 
criação de vários bancos e várias contas corrente e poupanças para cada banco. 
 
Para um dado banco deve ser possível: obter seu nome, obter seu código, criar uma 
nova conta, criar uma nova poupança e obter uma conta a partir de um código. 
 
Para cada conta corrente criada deve ser possível: obter o nome do correntista, 
obter o banco a qual a conta pertence, obter seu saldo, fazer uma aplicação e efetuar 
um débito. 
 
Uma conta poupança permite fazer tudo o que se pode fazer com uma conta 
corrente. No entanto, diferentemente de uma conta corrente, não se pode fazer uma 
retirada de poupança que torne seu saldo negativo. Quando essa situação ocorre, a 
poupança não faz a retirada e escreve uma mensagem na console avisando. 
 
Escreva um programa de teste que crie um banco e, para este banco, crie uma 
conta corrente e uma poupança. Efetue as operações possíveis para todas as classes 
existentes. 
Exercício 
package SistemaBancario; 
public class Banco{ 
protected static int prox_banco = 1; 
protected int MAX_CONTAS = 10; 
protected String nome; 
protected int codigo,prox_conta,ind_array; 
protected Conta[] contas; 
public Banco(String n){ 
nome = n; 
codigo = prox_banco++; 
prox_conta = 1; 
contas = new Conta[MAX_CONTAS]; 
ind_array = 0; 
} 
public int pegaCodB(){ 
return codigo; 
} 
public String pegaNomeB(){ 
return nome; 
} 
public void alteraNome(String n){ 
 nome = n; 
} 
public Conta criaConta(String nome){ 
Conta c; 
if(prox_conta==MAX_CONTAS) 
c = null; 
else{ 
c = new Conta(nome, prox_conta++, 
this); 
contas[ind_array++] = c; 
} 
return c; 
} 
public Conta buscaConta(int cod){ 
int i; 
for (i=0; i<ind_array; i++) 
if(contas[i].pegaCodigo()==cod) 
return contas[i]; 
return null; 
} 
 
 
 
Classe Banco 
Exercício 
public Poupanca criaPoupanca(String n){ 
Poupanca c; 
if(ind_array==MAX_CONTAS) 
c=null; 
else{ 
c = new Poupanca(nome, 
prox_conta++, this); 
contas[ind_array++] = c; 
} 
return c; 
} 
} 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
Classe Banco 
Exercício 
package SistemaBancario; 
public class Conta{ 
protected String nome; 
protected int codigo; 
protected Banco banco; 
protected float saldo; 
public Conta(String n, int c, Banco b){ 
nome = n; 
codigo = c; 
banco = b; 
saldo = 0F; 
} 
public Banco pegaBanco(){ 
return banco; 
} 
public void alteraBanco(Banco b){ 
banco = b; 
} 
public String pegaNome(){ 
return nome; 
} 
public void alteraNome(String n){ 
nome = n; 
} 
public int pegaCodigo(){ 
return codigo; 
} 
public void alteraCodigo(int c){ 
codigo = c; 
} 
public float pegaSaldo(){ 
return saldo; 
} 
public void aplica(float soma){ 
saldo += soma; 
} 
public void retira(float soma){ 
saldo -= soma; 
} 
public String toString(){ 
return "Conta corrente"; 
} 
} 
 
Classe Conta 
Exercício 
package SistemaBancario; 
public class Poupanca extends Conta{ 
public Poupanca(String n, int c, Banco b){ 
super (n, c, b); 
} 
public void retira(float soma){ 
if(saldo-soma<0) 
System.out.println("A poupança não pode ter saldo negativo"); 
else 
saldo -= soma; 
} 
public String toString(){ 
return "Poupanca"; 
} 
} 
Classe Poupança 
Exercício 
import SistemaBancario.*; 
class Teste{ 
public static void main(String[] args){ 
Banco itau = new Banco("Itau"); 
System.out.println(itau.pegaCodB()); 
System.out.println(itau.pegaNomeB()); 
Conta b, maria = itau.criaConta("Maria"); 
System.out.println(maria); 
b = itau.buscaConta(1); 
b = itau.buscaConta(2); 
Banco bb = new Banco("Banco do Brasil"); 
Poupanca jose = itau.criaPoupanca("Jose"); 
System.out.println(jose.pegaNome()); 
System.out.println(jose.pegaCodigo()); 
System.out.println(jose.pegaSaldo()); 
jose.aplica(100.0); 
jose.retira(30.5); 
System.out.println(jose.pegaSaldo()); 
} 
} 
Classe Teste 
Bibliografia 
 Santos, Rafael. Introdução à programação orientada a 
objetos usando Java. Editora Campus, 2003. 
 
 H. M. Deitel e P. J. Deitel, Java: como programar, Pearson 
Prentice-Hall. 
 
 Aulas do prof. Leandro Augusto da UFF.

Continue navegando