Na herança não posso chamar getAtributo() se não for uma instância do próprio objeto?

9 respostas
S

Não sei se fui claro mas vou tentar explicar.

Se tenho uma classe chamada Veículo que possui atributo Placa, uma classe Carro que estende da classe Veículo e possui atributo cor e modelo.
Pq quando crio uma instância do tipo carro desse jeito:

Veiculo  carro = new Carro();

não posso setar o valor de Placa desse jeito:

carro.setPlaca("abc-1234");

só pode se montar um método construtor em Carro e setar o valor de placa no super(); por ele?

9 Respostas

InicianteJavaHenriqu

Isto ocorre porque seu método setPlaca está com private (estou supondo, já que você não postou o código fonte) sendo que o correto seria está com visibilidade protected.

:thumbup:

S

Cometi um erro, na verdade acabei colocando a dúvida ao contrário, não consigo setar os valores de cor e modelo que são atributos da classe carro.

Para setar esses valores tive que fazer um método construtor em carro assim:

public Carro(String cor, String modelo) {
		super();
		this.cor= cor;
		this.modelo= modelo;
	}

só assim consegui fazer um carro:

Veiculo  carro = new Carro("azul", "PALIO");  
carro.setPlaca("abc-1234");

Diz que não existe os métodos setCor e setModelo.

InicianteJavaHenriqu

Então esse é o problema, o correto é protected ou você pode passa o valor através do construtor super();

:thumbup:

InicianteJavaHenriqu

Shatemui:
Cometi um erro, na verdade acabei colocando a dúvida ao contrário, não consigo setar os valores de cor e modelo que são atributos da classe carro.

Para setar esses valores tive que fazer um método construtor em carro assim:

public Carro(String cor, String modelo) {
		super();
		this.cor= cor;
		this.modelo= modelo;
	}

public Carro(String Placa, String cor, String modelo) {
		super(Placa);
		this.cor= cor;
		this.modelo= modelo;
	}

:!: :?:

Shatemui:
só assim consegui fazer um carro:

Veiculo  carro = new Carro("azul", "PALIO");  
carro.setPlaca("abc-1234");

Diz que não existe os métodos setCor e setModelo.

Diz onde :?: Você não criou (imaginou) eles na classe Carro :?:

:thumbup:

S

Criei, esse é o problema, estão lá mas mesmo assim diz que não existe, mas se crio Carro carro = new Carro(); funciona normal, mas se crio um tipo Veiculo e crio a instância de carro n funciona.

luistiagos

Posta seu código da classe Veiculo e Carro

ERVER

Pense da seguinte forma: vc criou um objeto do tipo veiculo. veiculo possui os metodos setCor e setModelo? Se for realmente isso, precisa estudar melhor OO (o q vc precisa eh d um typecast).

Abracos.

ErickRAR

Se o método só existe em carro e não existe em veículo, você deve fazer:

((Carro)veiculo).seuMetodo();

Lendo esse tópico você pode ter uma idéia de como funciona o polimorfismo.

E

Se você criou a classe Veiculo, e a classe Carro como sendo filha de veiculo (extends), todos os métodos que a classe veiculo tem a classe Carro tambem tem, pois ele recebeu da classe Veiculo por herança.

Criado 30 de junho de 2012
Ultima resposta 2 de jul. de 2012
Respostas 9
Participantes 6