Estou lendo o use a cabeça Java, e dei uma travada aqui na pagina 183.
Seguinte… na parte, Poder do Cérebro diz o seguinte.
E quanto às superclasses?
Quando voce criar um objeto Dog, o construtor de Canine também deve ser executado?
Se a superclasse for abstrata, ela deve ter um construtor?
Examinaremos isso nas proximas páginas, portanto, faça uma pausa agora e pense nas implicações existentes entre os construtores e as superclasses.
Nota* nao é lição de casa (rs)…
Não entendi mesmo nem por onde começar a pensar… nao entendi a questao de um construtor dentro da canine se deve ser executado. Porque executado se o objeto é Dog??
denisspitfire toda classe abstrata nunca será instanciada diretamente e sim através de uma classe que extendê-la e nisso é obrigatório incluir um contrutor nessa e dentro dela inserir o comando super(); para instanciar a classe pai e permitir compartilhar seus métodos ou atributos entre a classe pai com a filha.
exemplo prático:
publicabstractclassFuncionario{// Esse construtor somente será acessado pelo comando super() existente no construtor de uma classe filha que "extender" essa classe.publicFuncionario(){System.out.println("Instanciou um funcionario!");}}publicclassGerenteextendsFuncionario{publicGerente(){super();System.out.println("Instanciou um Gerente!");}}
espero ter ajudado, qualquer outra dúvida é só falar!! XD
nel
Oi!
Caninedog=newDog();
O construtor de Canine será executado, concorda?
Mas você pode simplesmente fazer:
Caninedog=newCanine()
Edit: segue o que o romarcio disse, está correto.
Abraços.
romarcio
Pelo que entendi a classe Canine é a superclasse de Dog.
Toda classe tem pelo menos 1 construtor.
Quando uma subclasse como Dog é executada, seu construtor é executado e a 1ª instrução do construtor de Dog a ser executada é uma chamada a super().
super() faz uma chamada ao construtor da superclasse, no caso Canine. Sempre que uma subclasse for executada, o construtor da super classe também será executado.
nel nesse caso uma classe esta utilizando tecnica de polimorfismo, e nisso ambas as classes são concretas e não uma classe abstrata. Ai nesse caso tbm é valido fazer o que vc citou, porém caso seja considerado que a classe Canine seja abstrata não será possível fazer essa instância:
Caninecanine=newCanine();
somente será correto fazer:
Caninecanine=newDog();
pq Dog é uma classe concreta.
denisspitfire
VLW gente é isso mesmo
R
RodrigoM91
caio.ribeiro.pereira:
denisspitfire toda classe abstrata nunca será instanciada diretamente e sim através de uma classe que extendê-la e nisso é obrigatório incluir um contrutor nessa e dentro dela inserir o comando super(); para instanciar a classe pai e permitir compartilhar seus métodos ou atributos entre a classe pai com a filha.
Tipo não entendi a sua explicação, toda classe tem um construtor default, sendo assim, você não é obrigado a incluir um construtor para ter acesso aos atributos tanto da classe pai como da classe filha...
publicclassClassTeste{/** * @param args */publicstaticvoidmain(String[]args){//Acesso somente os atributos da classe pai porque minha variavel de referência//é do tipo ClassPai!ClassPaitestePai=newClassFilha();//Acesso tanto os atributos da classe pai como a filha:ClassFilhatesteFilha=newClassFilha();}}
RodrigoM91 pegando o seu codigo como exemplo, oq estava querendo dizer sobre o q vc nao entendeu é a respeito da instancia e não do que uma classe pai ou filha pode acessar.
pois uma classe abstrata nao pode ela msma ser instancia diretamente e sim utilizando o comando super() dentro de um contrutor de uma classe filha, foi mais ou menos isso que estava explicando para o denisspitfire
ViniciusLM
caio.ribeiro.pereira:
RodrigoM91 pegando o seu codigo como exemplo, oq estava querendo dizer sobre o q vc nao entendeu é a respeito da instancia e não do que uma classe pai ou filha pode acessar.
pois uma classe abstrata nao pode ela msma ser instancia diretamente e sim utilizando o comando super() dentro de um contrutor de uma classe filha, foi mais ou menos isso que estava explicando para o denisspitfire
Hummm… entao para “Chegarmos até a classe Pai” tem que ir pela classe filha…
e se instaciar dessa fora
ClassPaitestePai=newClassPai();// <-- ERRADO
O que acontece? retorna algum erro?
caio.ribeiro.pereira
sim o java gerar um erro de compilação com a msg: “ClassPai is abstract; cannot be instantiated”
R
RodrigoM91
caio.ribeiro.pereira:
RodrigoM91 pegando o seu codigo como exemplo, oq estava querendo dizer sobre o q vc nao entendeu é a respeito da instancia e não do que uma classe pai ou filha pode acessar.
pois uma classe abstrata nao pode ela msma ser instancia diretamente e sim utilizando o comando super() dentro de um contrutor de uma classe filha, foi mais ou menos isso que estava explicando para o denisspitfire
Ata então eu entendi errado mesmo
Pensei que você está falando a respeito do que pode acessar ou não, perdão !
É realmente a sua colocação a respeito de instanciar está correto,
Nesse caso Vinicius o java nem compila essa linha de código, ou seja o problema já aparece logo na compilação !