Herança PII
Herança PII
Herança PII
Herança
Prof. Dr. Lidio Mauro Lima de Campos
[email protected]
class TwoDShape
{
private double width; private double height;
// Um construtor padrão
TwoDShape() {width = height = 0.0;}
// Construtor Parametrizado
TwoDShape(double w, double h)
{width = w; height = h; }
// Construtor que inicializa comprimento e altura com mesmo valor
TwoDShape(double x)
{width = height = x; }
// Métdos acessadores comprimento e altura.
...............................
}
Criando uma Hierarquia de Vários Níveis
EX5:// Uma hierarquia multinivel
class TwoDShape
{ ...............................
// Métdos acessadores comprimento e altura.
double getWidth() { return width; } double getHeight() { return height; }
void setWidth(double w) { width = w; } void setHeight(double h) { height
= h; }
void showDim()
{ System.out.println("Width and height are " + width + " and " + height); }
}
Criando uma Hierarquia de Vários Níveis
class Triangle extends TwoDShape
{
private String style;
// Um construtor padrão.
Triangle() { super(); style = "none";
}
Triangle(String s, double w, double h) {
super(w, h); // chama o construtor da superclasse
style = s;
}
// Um construtor de argumento único
..........} }
Criando uma Hierarquia de Vários Níveis
class Triangle extends TwoDShape
{ ..........
// Um construtor de argumento único
Triangle(double x) {
super(x); // chama o construtor da superclasse
style = "filled";
}
double area() { return getWidth() * getHeight() / 2; }
void showStyle() {
System.out.println("Triangle is " + style);
}}
Criando uma Hierarquia de Vários Níveis
// Herda de Triangulo
void showColor()
{
System.out.println("Color is " + color);
}
}
Criando uma Hierarquia de Vários Níveis
class Shapes {
public static void main(String args[]) {
ColorTriangle t1 = new ColorTriangle("Blue", "outlined", 8.0, 12.0);
ColorTriangle t2 = new ColorTriangle("Red", "filled", 4.0, 2.0);
class Shapes {
public static void main(String args[]) {
..........................
class Y extends X {
int b;
Y(int i, int j) {
super(j);
b = i;}
}
Referências da superclasse e objetos da subclasse
class SupSubRef {
public static void main(String args[]) {
X x = new X(10);
X x2;
Y y = new Y(5, 6);
x2 = x; // OK, ambos do mesmo tipo
System.out.println("x2.a: " + x2.a);
........................................
}
}
Referências da superclasse e objetos da subclasse
class SupSubRef {
public static void main(String args[]) {
.........................................
// Referências de X só conhecem membros de X
x2.a = 19; // OK
//x2.b = 27; // Erro, Não tem um membro b
}
}
Voltando ao Projeto Banco
• Verificação dinâmica
debitar();
...
ContaEspecial ce = new ContaEspecial( “123”, 1000 );
banco. adicionarConta(ce);
ContaCorrente cc = banco.obterConta( “123” );
cc.debitar( 1500 ); // método da superclasse
...
cc é do tipo conta corrente e por substituição aponta para
um objeto da subclasse (conta especial)
Herança
• Verificação de tipos com instanceof
...
ContaEspecial ce = new ContaEspecial( “123”, 1000 );
banco.adicionarConta( ce );
ContaCorrente cc = banco. obterConta( “123” );
if ( cc instanceof ContaEspecial )
{ System.out.println(“Cuidado com o limite!” ); }
...
cc é do tipo conta corrente e por substituição aponta para um
objeto da subclasse (conta especial), logo:
if ( cc instanceof ContaEspecial ) == F
Herança
• Conversões (casts)
...
ContaPoupanca cp = new ContaPoupanca( “123”, 1000 );
banco.adicionarConta( cp );
ContaCorrente cc = banco.obterConta( “123” );
((ContaPoupanca) cc ).renderJuros(); //pois o método render
juros é definido na subclasse
Herança - Exercício
• Crie as classes ContaEspecial e ContaPoupanca;
• Verifique se é necessário alterar a classe Banco
para suportar os novos tipos de classe criados;
• Permita ao usuário cadastrar os novos tipos de
conta.