• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

Pilassa

Instanciar classes

10 mensagens neste tópico

Boas,

Tenho uma pequena duvida no que toca a instanciar classes, é possivel instanciar uma classe abstracta ou tenho d instanciar as " sub-classes"?!

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Apesar de teres q instanciar a subclasse, podes manter o tipo, se isso te for util.

Assim:

Abstracto a = new SubClasse();

dd q subclasse extenda de abstracto.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Apesar de teres q instanciar a subclasse, podes manter o tipo, se isso te for util.

Assim:

Abstracto a = new SubClasse();

dd q subclasse extenda de abstracto.

Não descurar que tal obriga a um downcasting, caso se pretenda aceder a métodos ou atributos da sub classe.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Não descurar que tal obriga a um downcasting, caso se pretenda aceder a métodos ou atributos da sub classe.

Quando declaras uma variável sendo dum determinado tipo, é porque só precisas do comportamento desse tipo. Tu ao declarar a variável dizes claramente o que pretendes. Downcasting é 99% das vezes sinal de falha no design (teu ou da biblioteca que estás a usar).

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Não descurar que tal obriga a um downcasting, caso se pretenda aceder a métodos ou atributos da sub classe.

como assim?

qd faço isto

Abstracto a = new SubClasse();

não posso aceder directamente aos métodos definidos na SubClasse?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

qd faço isto

Abstracto a = new SubClasse();

não posso aceder directamente aos métodos definidos na SubClasse?

Exactamente. Como disse acima, ao declarar a variável como sendo do tipo "Abstracto" é porque só precisas do comportamento definido por "Abstracto".

Se precisas do comportamento adicional de "SubClasse", deves declarar "SubClasse a".

Mas apesar de o tipo de "a" ser "Abstracto", quando invocares um método, será a implementação em "SubClasse" a ser executada, se esta existir. Ver http://en.wikipedia.org/wiki/Dynamic_binding_(computer_science)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Exactamente. Como disse acima, ao declarar a variável como sendo do tipo "Abstracto" é porque só precisas do comportamento definido por "Abstracto".

Se precisas do comportamento adicional de "SubClasse", deves declarar "SubClasse a".

Mas apesar de o tipo de "a" ser "Abstracto", quando invocares um método, será a implementação em "SubClasse" a ser executada, se esta existir. Ver http://en.wikipedia.org/wiki/Dynamic_binding_(computer_science)

Pode perfeitamente fazer isto:

Abstracto a = new SubClasse();

Subclasse b = (subclasse) a;

Mas neste caso é inútil.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Pode perfeitamente fazer isto:

Abstracto a = new SubClasse();

Subclasse b = (subclasse) a;

Mas neste caso é inútil.

Eu não disse que não pode.

Downcasting é 99% das vezes sinal de falha no design (teu ou da biblioteca que estás a usar).

E é pedir que os bugs aconteçam.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora