Você está na página 1de 46

Programao Avanada

Captulo 3. Programao por objectos em Java

Responsvel:

Data:

Verso

Rui Silva

2 Ano 1 Semestre 2008 / 2009

1.4

Pg.:

1/46

Programao Avanada
ndice
3.1 - Qualificadores de visualizao 3.2 - Classe 3.3 - Objecto 3.4 - Mtodos 3.5 - Herana 3.6 - Reescrita de mtodos 3.7 - Classes abstractas

Indice

Responsvel:

Data:

Verso

Rui Silva

2 Ano 1 Semestre 2008 / 2009

1.4

Pg.:

2/46

Programao Avanada
ndice
3.2 -- Classe 3.2 Classe 3.3 -- Objecto 3.3 Objecto 3.4 -- Mtodos 3.4 Mtodos 3.5 -- Herana 3.5 Herana 3.6 -- Reescrita de mtodos 3.6 Reescrita de mtodos 3.7 -- Classes abstractas 3.7 Classes abstractas

3.1 Qualificadores de visualizao

3.1 - Qualificadores de visualizao

Responsvel:

Data:

Verso

Rui Silva

2 Ano 1 Semestre 2008 / 2009

1.4

Pg.:

3/46

Programao Avanada
3.1 Qualificadores de visualizao
O que so qualificadores de visualizao ?
Os objectos de uma classe acedem aos mtodos e variveis dos objectos de outras classes Os qualificadores de visualizao: -Classificam o tipo de acesso que ser permitido s variveis e mtodos -Permitem proteger as variveis e mtodos -Permitem o encapsulamento das variveis e mtodos As variveis de um objecto protegidas apenas so acessveis atravs dos designados acessors -Os acessors so constitudos por getters e setters -Esta tcnica de proteco a que se designa encapsulamento
Privada classe Setter publico

Getter publico
Responsvel: Data: Verso Pg.:

Rui Silva

2 Ano 1 Semestre 2008 / 2009

1.4

4/46

Programao Avanada
3.1 Qualificadores de visualizao
O que so qualificadores de visualizao ?

Classe: Mtodos e variveis definidos na classe so visveis a outros mtodos dentro da mesma classe. Package: Mtodos e variveis definidos na classe so visveis a outras classes definidas no mesmo package. SubOut: Mtodos e variveis definidos na classe so visveis pelas suas subclasses definidas noutro package Mundo: Mtodos e variveis definidos na classe so visveis por Responsvel: Data: Verso Pg.: 1.4 5/46 2 outro package e todas as classes mesmo de Ano 1 Semestre 2008 / 2009sem relao entre si. Rui Silva

Programao Avanada
ndice
3.1 -- Qualificadores de visualizao 3.1 Qualificadores de visualizao 3.2 - Classe 3.3 -- Objecto 3.3 Objecto 3.4 -- Mtodos 3.4 Mtodos 3.5 -- Herana 3.5 Herana 3.6 -- Reescrita de mtodos 3.6 Reescrita de mtodos 3.7 -- Classes abstractas 3.7 Classes abstractas

3.2 Classe

Responsvel:

Data:

Verso

Rui Silva

2 Ano 1 Semestre 2008 / 2009

1.4

Pg.:

6/46

Programao Avanada
3.2 Classes
Classe um conjunto de objectos do mesmo tipo
Definio de classe: -Molde ou modelo que define as variveis e os mtodos comuns a todos os objectos desse tipo A classe bicicleta definida anteriormente define: -Variveis ou atributos (campos) como: velocidade, cadncia do pedal e mudana. -Mtodos como: mudar mudana, mudar cadncia de pedal e travar. Ao declarar uma classe definem-se as suas caractersticas, que so: -Variveis do objecto -Variveis da classe -Mtodos do objecto -Mtodos da classe

Responsvel:

Data:

Verso

Rui Silva

2 Ano 1 Semestre 2008 / 2009

1.4

Pg.:

7/46

Programao Avanada
3.2 Classes
Classe: Sintaxe para definio da classe
Qualificadores da classe:

Sintaxe

public abstract class nome [ extends nomePai ][ implements nomeInterface ]{ final


Campos Mtodos opcional Herana opcional Interface

} Qualificadores da classe:
-Public: a classe pode ser publicamente acedida (os membros publicos da classe so disponibilizados em todo o programa). -Abstract: a classe no pode ser instanciada (normalmente porque alguns mtodos so apenas prottipos) -Final: a classe no pode ter subclasses Na omisso do qualificador public uma classe apenas acedida no pacote onde est definida. Uma classe pode ter mais do que 1 qualificador. No entanto no pode ser em simultneo abstract e final

Responsvel:

Data:

Verso

Rui Silva

2 Ano 1 Semestre 2008 / 2009

1.4

Pg.:

8/46

Programao Avanada
3.2 Classes
Classe: Variveis de classe e de objecto
Qualificadores da varivel:

public private protected static final


opcional inicializao

tipo nome [ = Expresso ] ;

Qualificadores do atributo (varivel) Visibilidade:


-public: Atributo acessvel onde quer que a classe seja acessvel -private: Atributo acessvel apenas na classe -protected: Atributo acessvel na classe, subclasses e classes no mesmo pacote

static: atributo da classe (comuns a todos os objectos instanciados da classe) final: atributo constante. (Constante possui atributos static final) Com excepo dos qualificadores de visibilidade, uma varivel pode ter mais que 1 qualificador
Responsvel: Data: Verso

Rui Silva

2 Ano 1 Semestre 2008 / 2009

1.4

Pg.:

9/46

Programao Avanada
3.2 Classes
Classe: Variveis de classe e de objecto
Variveis de Objecto: Pertencem a cada instncia do objecto. S ocupam espao depois de criados. (No tm a keyword static) -Tambm existem mtodos de classe (static) e objecto Variveis independentes a cada objecto (Instncia contaBancaria)
Saldo Titular

123456

ultimoNumero

0.05

Nmero

Variveis da classe (contaBancaria)

juro

Responsvel:

Data:

Verso

Rui Silva

2 Ano 1 Semestre 2008 / 2009

1.4

Pg.:

10/46

Programao Avanada
3.2 Classes
Classe: Variveis de classe e de objecto
Uma varivel (atributo) de uma classe acedido pelo operador ponto (.) A forma de aceder varivel :

referncia.atributo
A referncia um identificador de: -Objecto, se o atributo no tiver o qualificador static. -Classe, se o atributo tiver o qualificador static: Exemplo:

System.out.println(Contabancaria.titular)

Responsvel:

Data:

Verso

Rui Silva

2 Ano 1 Semestre 2008 / 2009

1.4

Pg.:

11/46

Programao Avanada
3.2 Classes
Mtodos de objecto
Os mtodos definem a forma como o objecto interage com o mundo exterior (interfaces) -Os mtodos de classe so definidos pela keyword static -Os mtodos de classe podem (devem) ser acedidos directamente pela classe, mesmo que no tenha sido criada nenhuma instncia (objecto) dessa classe. -Exemplo: ContaBancaria.obterJuro(); Mtodo de objecto

Mtodo de classe
Responsvel: Data: Verso

Rui Silva

2 Ano 1 Semestre 2008 / 2009

1.4

Pg.:

12/46

Programao Avanada
3.2 Classes
Forma dos mtodos alterarem variveis
Os mtodos de objecto podem ler e alterar variveis de objecto e de classe. Os mtodos de classe (static) s podem ler e alterar as variveis de classe -Os mtodos de objecto alteram o estado do objecto. Os de classe o estado da classe Manipula varivel de objecto (instancia ContaBancaria)

Manipula varivel juro da classe contaBancaria


Responsvel: Data: Verso Pg.:

Rui Silva

2 Ano 1 Semestre 2008 / 2009

1.4

13/46

Programao Avanada
3.2 Classes
Classes encadeadas
Java permite a criao de classes encadeadas -Forma de agrupamento lgico das classes (se 1 classe apenas util para outra, ento lgico embeb-la nessa classe e mant-las em conjunto) -Aumenta o encapsulamento -Arruma melhor o cdigo As classes encadeadas podem ser -Estticas -> denominadas classes estticas encadeadas (static nested classes) -No estticas -> denominadas classes interiores (inner classes)
Exemplo:
class OuterClass { ... static class StaticNestedClass { ... } class InnerClass { ... } }

Classes encadeadas

Classe esttica (encadeada) Classe no esttica (interior)


Responsvel: Data: Verso Pg.:

Rui Silva

2 Ano 1 Semestre 2008 / 2009

1.4

14/46

Programao Avanada
3.2 Classes
Classes encadeadas
Acesso a classes estticas encadeadas (static nested classes)
-Interage com as intncias da sua classe exterior (outerclass) tal como outra classe top level -So acedidas da seguinte forma:
OuterClass.StaticNestedClass

-Os objectos das classes estticas encadeadas so creados da seguinte forma:


OuterClass.StaticNestedClass nestedObject nestedObject = new OuterClass.StaticNestedClass();

Classes no estticas
-As classes interiores (inner) esto associadas a uma instncia da sua classe envolvente -No podem definir nenhum mtodo esttico -Tm acesso directo aos mtodos e campos da classe envolvente -So instanciadas da seguinte forma:
OuterClass.InnerClass innerObject innerObject = outerObject.new InnerClass();

Instncia da classe exterior

Instncia da classe interior


Data: Verso Pg.:

Responsvel:

Rui Silva

2 Ano 1 Semestre 2008 / 2009

1.4

15/46

Programao Avanada
ndice
3.1 -- Qualificadores de visualizao 3.1 Qualificadores de visualizao 3.2 -- Classe 3.2 Classe 3.3 - Objecto 3.4 -- Mtodos 3.4 Mtodos 3.5 -- Herana 3.5 Herana 3.6 -- Reescrita de mtodos 3.6 Reescrita de mtodos 3.7 -- Classes abstractas 3.7 Classes abstractas

3.3 Objecto

Responsvel:

Data:

Verso

Rui Silva

2 Ano 1 Semestre 2008 / 2009

1.4

Pg.:

16/46

Programao Avanada
3.3 Objecto
Criar ou Instanciar um objecto
Instanciar um objecto implica: -A criao de uma varivel que vai apontar para o objecto (Neste caso Objecto1) -A instanciao do objecto usando o comando new seguido de uma chamada ao mtodo construtor da classe. Sintaxe: Ident = new Classe( [ Expr [, Expr ]* ]) -Ident: referncia par ao objecto a ser criado -Classe: Classe a que pertence o objecto -Expr: Parmetros a passar ao construtor (opcional) Exemplo: Criar 1 instncia do objecto ContaBancaria representada pela varivel Objecto1
ContaBancaria Objecto1 ; Objecto1 = new ContaBancaria();

Variveis de objecto

Declarao obrigatria Construtor


Responsvel: Data: Verso

Rui Silva

2 Ano 1 Semestre 2008 / 2009

1.4

Pg.:

17/46

Programao Avanada
3.3 Objecto
Como o Objecto acede s variveis
O Objecto acede s suas variveis e s da classe a que pertence e -Para aceder s variveis de objecto h que referir o nome do objecto, ponto (.) e nome da varivel
Objecto1.numero=++ultimoNumero ; Objecto1.titular=Carlos; Objecto1.saldo=234.5f; Objecto2.numero=++ultimoNumero ; Objecto2.titular=Maria; Objecto2.saldo=543.2f;

Responsvel:

Data:

Verso

Rui Silva

2 Ano 1 Semestre 2008 / 2009

1.4

Pg.:

18/46

Programao Avanada
ndice
3.2 -- Classe 3.2 Classe 3.3 -- Objecto 3.3 Objecto 3.4 - Mtodos 3.5 -- Herana 3.5 Herana 3.6 -- Reescrita de mtodos 3.6 Reescrita de mtodos 3.7 -- Classes abstractas 3.7 Classes abstractas

3.4 Mtodos

3.1 -- Qualificadores de visualizao 3.1 Qualificadores de visualizao

Responsvel:

Data:

Verso

Rui Silva

2 Ano 1 Semestre 2008 / 2009

1.4

Pg.:

19/46

Programao Avanada
3.4 Mtodos
Mtodos: Sintaxe para definio de mtodos
Qualificadores do mtodo:

public private

Tipo de retorno do mtodo (Int, float, String, etc.)

protected tipo nome ( [Tipop IdentP ] * ) { Varialvel local | Intruo } abstract static final
Opcional Tipo dos parmetros do mtodo Int, float, String, etc

Qualificadores do mtodo Visibilidade:


-public: Mtodo acessvel onde quer que a classe seja acessvel -private: Mtodo acessvel apenas na classe -protected: Mtodo acessvel na classe, subclasses e classes no mesmo pacote

abstract: Mtodo sem corpo. static: Mtodo de classe final: Mtodo que no pode ser redefinido nas subclasses
Responsvel: Data: Verso

Rui Silva

2 Ano 1 Semestre 2008 / 2009

1.4

Pg.:

20/46

Programao Avanada
3.4 Mtodos
Mtodos: Forma de aceder a mtodos
Um mtodo de uma classe acedido pelo operador ponto (.) na forma

referncia.metodo(params)
A referncia um identificador de:
-Objecto, se o mtodo no tiver qualificador static. -Classe, se o mtodo tiver qualificador static

Chamada sucessiva
Um mtodo pode retornar um objecto, ao qual se pode chamar outro mtodo. Existem duas formas de chamar sucessivamente os mtodos: -1 Guardar o objecto numa varivel

Classe var = obj.metodo1(); var.metodo2();


-2 Chamar directamente

obj.metodo1().metodo2();
Responsvel: Data: Verso

Rui Silva

2 Ano 1 Semestre 2008 / 2009

1.4

Pg.:

21/46

Programao Avanada
3.4 Mtodos
Valor devolvido por um mtodo
Um mtodo uma funo. Uma funo retorna sempre um valor. Esse valor um tipo: predefinido, apontador ou void (sem return)
public boolean levantar(float quantidade) { if (saldo>=quantidade) { saldo = quantidade; return true; }else{ return false; } } } } public void levantar(float quantidade) { if (saldo>=quantidade) { saldo = quantidade; obterSaldo(); }else{ System.out.print(No tem Saldo); obterSaldo();

Devolve boolean (true | False)

Devolve void

Responsvel:

Data:

Verso

Rui Silva

2 Ano 1 Semestre 2008 / 2009

1.4

Pg.:

22/46

Programao Avanada
3.4 Mtodos
Valor devolvido por um mtodo
Quando os parmetros so do tipo pr definidos

Resultado:

Embora o mtodo troca() faa a troca dos contedos das variveis Os contedos das variveis x e y definidas em main no sofrem alteraes. O mtodo trabalha com cpias das variveis (duas novas) definidas localmente. Responsvel:
Rui Silva
Data: Verso

2 Ano 1 Semestre 2008 / 2009

1.4

Pg.:

23/46

Programao Avanada
3.4 Mtodos
Valor devolvido por um mtodo
Quando os parmetros so do tipo pr definidos -Variveis do tipo predefinido (byte, int, float, ). Java guarda os seus valores na memria stack. -Variveis do tipo Objecto tambm so guardadas na stack, mas o seu contedo guardado na memria Heap. -Variveis do tipo String Constantes so guardadas parte numa memria denominada Dicionrio de Strings. (Poupa espao, pois se usarmos vrias vezes estas strings constantes na mesma classe (e package) referencia sempre a mesma rea de memria. - Quando passamos parmetros para dentro de 1 mtodo, esses valores so colocados na stack antes da chamada do mtodo e l-os da stack quando entra no mtodo. Desta forma os valores que passam para dentro do mtodo so sempre cpias de valores primitivos ou cpias de ponteiros . -Este facto mostrado no exemplo anterior. O mtodo troca () trabalha sobre cpia das variveis e no sobre as variveis definidas em main.

Responsvel:

Data:

Verso

Rui Silva

2 Ano 1 Semestre 2008 / 2009

1.4

Pg.:

24/46

Programao Avanada
3.4 Mtodos
Valor devolvido por um mtodo
O valor do apontador copiado para a. Ambos os apontadores referenciam o mesmo objecto. A alterao feita no valor do objecto.

Quando os parmetros so do tipo objectos contedo (Array)

Resultado:

O mtodo troca() recebe um apontador para o objecto. Esse apontador referencia o mesmo endereo de memria que a varivel x do mtodo main. No mtodo troca() as chamadas ao array a, esto a provocar alteraes no array x do mtodo main. O contedo do array do mtodo main tambm alterado.
Responsvel: Data: Verso Pg.:

Rui Silva

2 Ano 1 Semestre 2008 / 2009

1.4

25/46

Programao Avanada
3.4 Mtodos
Valor devolvido por um mtodo
Quando os parmetros so do tipo Objecto ou Array -O que passa para dentro do mtodo apenas uma cpia da referncia (ou ponteiro) para esse objecto ou array. -Apesar de ser uma cpia o endereo de memria indicado pelo ponteiro referencia exactamente o mesmo Objecto ou array que foi passado para dentro do mtodo -> O seu contedo alterado directamente -No exemplo anterior, o mtodo recebe um apontador para o objecto, em vez de receber os valores contidos no objecto. Sendo assim, essa alterao reflectida em main()

Responsvel:

Data:

Verso

Rui Silva

2 Ano 1 Semestre 2008 / 2009

1.4

Pg.:

26/46

Programao Avanada
3.4 Mtodos
Valor devolvido por um mtodo
a recebe o apontador de x e b o de y. Os valores de a e b trocam de apontadores x e y continuam a apontar para o mesmo

Quando os parmetros so do tipo objectos apontador

Resultado:

O que passa para dentro do mtodo troca() so cpias dos ponteiros. Os valores dos ponteiros so trocados no mtodo troca(). Essa alterao apenas feita localmente e no reflectida em main(). No se est a trocar o contedo das variveis x e y de main() mas sim o contedo das suas cpias a e b que inicialmente apontavam para os mesmo objectos.
Responsvel: Data: Verso

Rui Silva

2 Ano 1 Semestre 2008 / 2009

1.4

Pg.:

27/46

Programao Avanada
3.4 Mtodos
Valor devolvido por um mtodo
Quando os parmetros so do tipo apontadores - semelhana do exemplo anterior, o que passa para dentro do mtodo apenas uma cpia da referncia (ou ponteiro) para esse objecto. -No entanto, neste caso, o mtodo troca() no altera os contedos das variveis x e y. Os valores dos ponteiros so apenas trocados localmente no mtodo troca(). A alterao no reflectica em main(). -Neste exemplo, nem sequer podemos trocar os contedos dos objectos, pois a classe String no disponibiliza mtodos para o fazer.

Responsvel:

Data:

Verso

Rui Silva

2 Ano 1 Semestre 2008 / 2009

1.4

Pg.:

28/46

Programao Avanada
3.4 Mtodos
A palavra reservada this
Utilizada nos mtodos para representar o objecto actual Permite distinguir um parmetro de uma varivel local
Parmetro Resultado:

This

Varivel de objecto

Tambm permite enviar o objecto actual como argumento:


Button.addAcionListener(this);

Responsvel:

Data:

Verso

Rui Silva

2 Ano 1 Semestre 2008 / 2009

1.4

Pg.:

29/46

Programao Avanada
3.4 Mtodos
Overloading ou sobrecarga de mtodos
Overloading : Mecanismo que permite a declarao mltipla de mtodos com o mesmo nome. -Em Java os mtodos so identificados pela sua assinatura. -A assinatura constituda pelo nome, nmero, tipo e ordem dos parmetros Podemos ter vrios mtodos com o mesmo nome, desde com parmetros diferentes (interessa a ordem e o tipo) -> Permite adicionar mtodos que acrescentem novos comportamentos sem alterar os que j esto definidos
public class Quadrilatero { public static void calculoArea(double lado) { System.out.println(A rea do quadrado + lado * lado); } public static void calculoArea(double lado1, double lado2) { System.out.println(A rea do rectngulo + lado1 * lado2); } public static void main(String[] srgs){ calculoArea(3.0); calculoArea(3.0, 4.0); }
Responsvel: Data: Verso Pg.:

Overloading de mtodos

Resultado:
A rea do quadrado : 9.0 A rea do rectngulo : 12.0

Rui Silva

2 Ano 1 Semestre 2008 / 2009

1.4

30/46

Programao Avanada
3.4 Mtodos
O mtodo construtor
Permite instanciar (criar) um objecto da classe (No considerado um mtodo) Permite inicializar as variveis do objecto. Possui as seguintes caractersticas: -Tem o mesmo nome da classe -Nunca devolvem tipos (nem mesmo void). (No declaramos o tipo de valor devolvido) - invocado atravs da instruo new. -So normalmente utilizados para inicializar as variveis de instncia Uma classe pode ter mais do que um construtor. -O tipo e nmero de argumentos dado ao construtor, determinam qual o construtor a usar. No obrigatrio definir um construtor na classe. -Na ausncia de construtor, a classe herda o construtor por omisso. (construtor da classe Object) -O construtor por omisso tem um comportamento bsico. Cria um novo objecto com todas as variveis definidas na classe atribuindo-lhes valores pr-definidos pela linguagem JAVA
Responsvel: Data: Verso

Construtor

Rui Silva

2 Ano 1 Semestre 2008 / 2009

1.4

Pg.:

31/46

Programao Avanada
3.4 Mtodos
O mtodo construtor
public class Conta { /* Variveis da classe */ private static long numProxConta = 0; protected long numConta; protected String dono; protected float quantia; /* Construtores */ Conta() { numConta = numProxConta +1 ; } Conta (String s, float q) { numConta = numProxConta +1; Conta c2 = new Conta(Pedro, 100); dono = s; quantia = q; } /* Mtodos . */ }
Responsvel: Data: Verso Pg.:

Exemplo 1:
Conta c1 = new Conta();

Cria um objecto c1 do tipo conta e atribui o valor 1 varivel numConta.

Exemplo 2:

Cria um objecto c1 do tipo conta, inicializando as variveis dono e quantia. e atribui o valor 1 varivel numConta.

Rui Silva

2 Ano 1 Semestre 2008 / 2009

1.4

32/46

Programao Avanada
3.4 Mtodos
O mtodo construtor
Construtor por cpia Um construtor por cpia um construtor que recebe como argumento um objecto do mesmo tipo que o objecto que vai construir, e constri novo objecto com o mesmo estado do objecto recebido -Um construtor por cpia vai atribuir o valor das variveis do objecto recebido ao objecto a ser criado:
... /* Construtore por cpia */ Conta(Conta c) { numConta = c.numConta; dono = c.dono; quantia = c.quantia; } ...

Os valores variveis do objecto Conta so Copiados para o novo objecto criado

Responsvel:

Data:

Verso

Rui Silva

2 Ano 1 Semestre 2008 / 2009

1.4

Pg.:

33/46

Programao Avanada
3.4 Mtodos
O mtodo construtor
Chamada explcita de outros construtores this(); -Um construtor pode fazer uma chamada explcita a outro construtor da classe atravs de this(); -Se o construtor tiver N parmetros, estes devem ser passados na chamada explicita this(N1, N2,..)
public class Conta { protected long numConta = 0; protected String dono; protected float quantia; Conta() { this("Rui", 100); // o mesmo que conta(Rui , 100); numConta = numConta+50; } Conta(String s, float q) { dono = s; quantia = q ; numConta = numConta + 100; } public static void main (String[] args){ Conta c1 = mew Conta(); System.out.println(c1.dono + " " + " " + c1.quantia + " " + c1.numConta); }
Responsvel: Data: Verso

Construtor chamado Construtor faz chamada explicita ao outro construtor passando parmetros -> this (N1, ); Resultado:
Rui 100.0 150

Rui Silva

2 Ano 1 Semestre 2008 / 2009

1.4

Pg.:

34/46

Programao Avanada
ndice
3.2 -- Classe 3.2 Classe 3.3 -- Objecto 3.3 Objecto 3.4 -- Mtodos 3.4 Mtodos 3.5 - Herana 3.6 -- Reescrita de mtodos 3.6 Reescrita de mtodos 3.7 -- Classes abstractas 3.7 Classes abstractas

3.5 Herana

3.1 -- Qualificadores de visualizao 3.1 Qualificadores de visualizao

Responsvel:

Data:

Verso

Rui Silva

2 Ano 1 Semestre 2008 / 2009

1.4

Pg.:

35/46

Programao Avanada
3.5 Herana
Mecanismo de Herana
Permite subclasse (filho) herdar mtodos e variveis (*) da super classe (pai) -Os qualificadores dos mtodos da super classe tambm so herdados -A sub classe define o que novo ou diferente -A sub classe estende as funcionalidades da super classe -Todas as classes so extenses da classe object (por omisso)
(*) A sub classe herda todas as variveis e mtodos com visibilidade public ou protected, mas no os private das super classes. Os construtores no so mtodos portanto no so herdados S h herana simples de classes. Uma sub classe s pode ter uma super classe. Uma super classe pode ter vrias sub classes
Funcionalidades da super classe Funcionalidades da sub classe

Herana consegue-se recorrendo palavra reservada extends


class MountainBike extends Bicycle { // Colocar aqui novos campos e mtodos que definam a MountainBike } Responsvel: Data: Verso Pg.:

Rui Silva

2 Ano 1 Semestre 2008 / 2009

1.4

36/46

Programao Avanada
3.5 Herana
Mecanismo de Herana
Construtores em subclasses -> super(). super() permite que na subclasse se faam chamadas explcitas a construtores da super classe.
super() ; super(N, N1, ) ;

Chamada explcita ao construtor da super classe Chamada explcita ao construtor da super classe se este tiver N parmetros

Se nenhum construtor da superclasse for chamado na sub classe. implicitamente chamado o contrutor sem argumentos da superclasse. Se a superclasse no tiver um construtor sem argumentos, necessrio chamar explicitamente um construtor da superclasse.

Responsvel:

Data:

Verso

Rui Silva

2 Ano 1 Semestre 2008 / 2009

1.4

Pg.:

37/46

Programao Avanada
3.5 Herana
Mecanismo de Herana
Exemplo de chamada implcita e explicita de construtores da superclasse
public class A { protected int a; A() { // Construtor a = 5; } A(int var) { // Construtor a = var; } } } } public class DuplicaA extends A { DuplicaA() { // Construtor a *= 2; } DuplicaA(int var) { // Construtor super(var); a *=2;

No necessrio chamar explicitamente super(), pois a super classe tem construtor sem argumentos e implicitamente chamado.

Responsvel:

Data:

Verso

Rui Silva

2 Ano 1 Semestre 2008 / 2009

1.4

Pg.:

38/46

Programao Avanada
3.5 Herana
Mecanismo de Herana
Exemplo de chamada implcita e explicita de construtores da superclasse
public class A { protected int numero; A(int num) { // Construtor numero = num; } } } B(int num, String str) { this(num); nome = str; } } } B(int num) { super(num); public class B extends A { B() { // Construtor super(-1);

necessrio chamar explicitamente super(), pois a super classe no tem construtor sem argumentos this() pode continuar a ser utilizado para chamar explicitamente o construtor da subclasse.
Responsvel: Data: Verso

Rui Silva

2 Ano 1 Semestre 2008 / 2009

1.4

Pg.:

39/46

Programao Avanada
ndice
3.2 -- Classe 3.2 Classe 3.3 -- Objecto 3.3 Objecto 3.4 -- Mtodos 3.4 Mtodos 3.5 -- Herana 3.5 Herana 3.6 - Reescrita de mtodos 3.7 -- Classes abstractas 3.7 Classes abstractas

3.6 Reescrita de mtodos

3.1 -- Qualificadores de visualizao 3.1 Qualificadores de visualizao

Responsvel:

Data:

Verso

Rui Silva

2 Ano 1 Semestre 2008 / 2009

1.4

Pg.:

40/46

Programao Avanada
3.6 Reescrita de mtodos
Reescrita ou overriding de mtodos
O comportamento de um mtodo da super classe pode no interessar subclasse. A subclasse pode redefinir o mtodo. S tem que o re-escrever. -Neste caso os dois mtodos (da super e da subclasse ficam disponveis aos objectos da subclasse) Exemplo da disponibilidade de mtodos da super classe:
nome () ; super.nome () ;

Invoca o mtodo redefinido na subclasse. Invoca o mtodo da super classe.

super() permite invocar mtodos das super classes

Responsvel:

Data:

Verso

Rui Silva

2 Ano 1 Semestre 2008 / 2009

1.4

Pg.:

41/46

Programao Avanada
ndice
3.2 -- Classe 3.2 Classe 3.3 -- Objecto 3.3 Objecto 3.4 -- Mtodos 3.4 Mtodos 3.5 -- Herana 3.5 Herana 3.6 -- Reescrita de mtodos 3.6 Reescrita de mtodos 3.7 - Classes abstractas

3.7 Classes abstractas

3.1 -- Qualificadores de visualizao 3.1 Qualificadores de visualizao

Responsvel:

Data:

Verso

Rui Silva

2 Ano 1 Semestre 2008 / 2009

1.4

Pg.:

42/46

Programao Avanada
3.7 Qualificador abstract
Classe abstracta quando reune caractersticas comuns a outras classes.
Este tipo de classes demasiado genrico No pode ser instanciado. -Exemplo. No faz sentido instanciar a classe veiculo, mas sim criar objectos de automovel, autocarro, moto O qualificador abstract pode ser usado em classes e em mtodos. Quando um mtodo abstract toda a classe abstract -A definio de um mtodo abstract consiste na definio da sua assinatura, (nome e parmetros) no tendo instrues. As suas subclasses so obrigadas a definir instrues dos mtodos abstract seno tero que ser abstract. -Isto obriga a um mecanismo de condicionamento das subclasses, pois obriga-as a implementar os mtodos abstract para serem instanciadas.

Responsvel:

Data:

Verso

Rui Silva

2 Ano 1 Semestre 2008 / 2009

1.4

Pg.:

43/46

Programao Avanada
3.7 Qualificador abstract
Classe abstracta Exemplo figura geomtrica
Em Java todas as classes so directa ou indirectamente extenses da classe OBJECT. Sempre que uma classe no usa a palavra reservada extends, torna-se uma extenso directa de OBJECT. As suas subclasses sero extenses indirectas de OBJECT
OBJECT

Classe abstracta

Figura Geomtrica

sub classes:

Triangulo

Quadrilatero

Circulo

Pentgono

instancias

Responsvel:

Data:

Verso

Rui Silva

2 Ano 1 Semestre 2008 / 2009

1.4

Pg.:

44/46

Programao Avanada
3.7 Qualificador abstract
Classe abstracta Exemplo figura geomtrica
Implementao da classe abstracta e subclasses
abstract class FiguraGeometrica { int x, y; ... void movePara(int newX, int newY) { ... } abstract void dezenha(); abstract void alteraTamanho(); }

Classe abstracta

1 declarar a classe abstracta que providencia variveis e mtodos partilhados por todas as subclasses. Exemplo: Posio corrente (x e y) movePara(),... 2 declarar os mtodos abstractos que necessitam de ser implementados por todas as subclasses 3 Cada classe no abstracta como Circulo ou Quadrilatero devero implementar os mtodos abstractos da classe abstracta

sub classes:

class Circulo extends FiguraGeometrica { void dezenha() { ... } void alteraTamanho() { ... } } class Quadrilatero extends FiguraGeometrica { void dezenha() { ... } void alteraTamanho() { ... } Responsvel: }
Rui Silva

Data:

Verso

2 Ano 1 Semestre 2008 / 2009

1.4

Pg.:

45/46

Programao Avanada

FIM

Responsvel:

Data:

Verso

Rui Silva

2 Ano 1 Semestre 2008 / 2009

1.4

Pg.:

46/46