Herança!

11 respostas
S

Pessoal!!
Fiquei confuso agora com a herança.
Eu posso ter por ex 4 nives de heranca

A Super
B extends A
C extends B
d extends C
Se eu estiver acessando a classe “C” todos os atributos de “A” estao disponiveis pra mim?

11 Respostas

anderline

Tudo depende do nível de acesso dos variáveis e métodos das suas classes, se os atributos e métodos da classe A forem públicos, sim, se forem privados não, se forem padrão ou protegido, sim se estiverem no mesmo pacote, caso estejam em pacotes diferentes o membro protegido poderá ser acessado por meio da herança.
Caso uma outra classe que não seja subclasse e esteja em outro pacote queira acessar os menbros da classe A, ela só terá acesso aos menbro públicos._

anderline

só uma coisa, onde lê-se menbro é membro rsrs, santa ignorância.

brunocia2000

Exatamente como o anderline disse, depende do especificador de acesso, do membro, e também se ele se encontra no mesmo package ou nao.

O caso é que ‘C’ pode acessar ‘A’ , porém ‘A’ não pode acessar ‘C’ diretamente, a menos que crie uma instância para isso.

Abraços

LPJava

eh como a galera falor depende do modificador de acesso um exemplo:
se vc declarar um metodo como private:

private void setMet(){}

esse metodo nao vai ser herdado por nenhuma class pq ele é unico, exclusivo da classe aonde ele foi declarado!! e também tem outro se for FINAL nao eh herdado tb!! percebeu… pq nao temos uma resposta direta a sua pergunta? ou seja um Sim e ou Não. devido a essa regras!!

Mantu
camilolopes:
e também tem outro se for FINAL nao eh herdado tb!!
Isso não é verdade. O final serve apenas para não permitir que nenhuma subclasse sobrescreva um determinado método declarado com este modificador. Veja o exemplo a seguir:
class A{
	public final void m() {
		System.out.println("bla");
	}
}

class B extends A{
	public final void k() {
		System.out.print("Hein? ");
		m();
	}
	
/*
 * Descomente este método e terá um erro de compilação informando que não dá pra 
 * sobrescrever métodos final
 */
//	public void m() {
//		System.out.println("Nunca serei impresso... ;-(");
//	}
}

class Teste{
	public static void main(String[] args) {
		B b = new B();
		b.m();
		System.out.println();
		b.k();
	}
}
O método m é herdado normalmente pela classe B, porém, é impossível para B - bem como para qualquer outra classe abaixo de A na hierarquia de classes - sobrescrever o método m. Utiliza-se o final, por exemplo, quando se quer garantir que um determinado método e sua implementação sejam propagados de forma íntegra para as demais subclasses.
francislon

Não Mantu, o camilolopes quis dizer que uma classe declarada como final, teoricamente não pode ser herdada. :slight_smile:

LPJava

entao me expressei mal, pq uma class marcada como final ela nao pode ser extends… ou to errado?

Mantu

Aí sim. Mas a forma como vc escreveu:

A concordância dessa frase leva claramente a crer que você estava falando do método (“não é herdad[u]o[/u]”, concordando em gênero com “método”, que é masculino, e não com “classe”, que é feminino)
Com certeza você se expressou mal. Foi isso.

S

Entao eu declarei tudo como public.
E estou num nivel la embaixo mas nao consigo acessar nenhum atributo de A.
Da erro em execução!

S

Bom na real é assim óh.
A minha ideia é criar o meu proprio framework.
Fiz um levantamento e notei um conjunto de informações padrao em pra ticamente todos os meus objetos (nome, id, cod, …) dai entao a ideia deixar tudo pronto em diversas classes e depois só dar um extends no que eu quero. Meu desenvolvimento é web, dai comecei pelo pacote model, depois negocio e Servlets. Na compilação esta tudo ok, vai lindo, só que em tempo de execução na minha JSP nao da certo ( erro: javax.servlet.ServletException: com/br/model/framework/DadosBean
Este dadosBean que aparece no erro seria dois niveis acima da classe cliente por exemplo.
Dai eu tenho:
FrameworkBean
DadosBean
CnpjBean || CpfBean
E por fim a classe ClienteBean.
Todos os atributos e metodos são publicos.
Seria um problema de entendimento no conceito herança?
Preciso usar interfaces neste caso?

anderline

Cara posta os seu códigos._

Criado 28 de fevereiro de 2007
Ultima resposta 4 de mar. de 2007
Respostas 11
Participantes 6