Baixe o app para aproveitar ainda mais
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.
Compartilhar