Ir para o conteúdo
Pilassa

Instanciar classes

Mensagens Recomendadas

Pilassa    0
Pilassa

Boas,

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

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
bruno1234    20
bruno1234

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.

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
André Sousa    0
André Sousa

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.

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
edsousa    0
edsousa

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).

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
nata79    0
nata79

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?

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
edsousa    0
edsousa

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)

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
André Sousa    0
André Sousa

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.

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
edsousa    0
edsousa

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.

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


×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade