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:
public abstract class Funcionario {
// Esse construtor somente será acessado pelo comando super() existente no construtor de uma classe filha que "extender" essa classe.
public Funcionario(){
System.out.println("Instanciou um funcionario!");
}
}
public class Gerente extends Funcionario {
public Gerente(){
super();
System.out.println("Instanciou um Gerente!");
}
}
espero ter ajudado, qualquer outra dúvida é só falar!! XD
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:
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…
veja o exemplo:
Classe pai abstrata:
[code]public abstract class ClassPai {
private String atributoPai;
public String getAtributoPai() {
return atributoPai;
}
public void setAtributoPai(String atributoPai) {
this.atributoPai = atributoPai;
}
}[/code]
Classe filha extendendo da classe pai abstrata:
[code]public class ClassFilha extends ClassPai {
private String atributoFilha;
public String getAtributoFilha() {
return atributoFilha;
}
public void setAtributoFilha(String atributoFilha) {
this.atributoFilha = atributoFilha;
}
}[/code]
Classe de teste com os comentários a respeito:
[code]public class ClassTeste {
/**
* @param args
*/
public static void main(String[] args) {
//Acesso somente os atributos da classe pai porque minha variavel de referência
//é do tipo ClassPai!
ClassPai testePai = new ClassFilha();
//Acesso tanto os atributos da classe pai como a filha:
ClassFilha testeFilha = new ClassFilha();
}
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.
como exemplo o no seu codigo:
public class ClassTeste {
public static void main(String[] args) {
// Instancia correta
ClassPai testePai = new ClassFilha(); // <-- CORRETO
//Instancia correta
ClassFilha testeFilha = new ClassFilha(); // <-- CORRETO
// Instancia Incorreta
ClassPai testePai = new ClassPai(); // <-- ERRADO
}
}
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
[quote=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.
como exemplo o no seu codigo:
public class ClassTeste {
public static void main(String[] args) {
// Instancia correta
ClassPai testePai = new ClassFilha(); // <-- CORRETO
//Instancia correta
ClassFilha testeFilha = new ClassFilha(); // <-- CORRETO
// Instancia Incorreta
ClassPai testePai = new ClassPai(); // <-- ERRADO
}
}
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
[/quote]
Hummm… entao para “Chegarmos até a classe Pai” tem que ir pela classe filha…
[quote=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.
como exemplo o no seu codigo:
public class ClassTeste {
public static void main(String[] args) {
// Instancia correta
ClassPai testePai = new ClassFilha(); // <-- CORRETO
//Instancia correta
ClassFilha testeFilha = new ClassFilha(); // <-- CORRETO
// Instancia Incorreta
ClassPai testePai = new ClassPai(); // <-- ERRADO
}
}
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
[/quote]
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 !