Herança, Abstract e Interface

28 respostas
israelwm

Olá, eu procurei nuns tópicos, li, mas naum entendi direito,
alguem teria um exemplo em java sobre esse tipo de herança? eu realmente naum saquei.

Eu tentei fazer um exemplo pra mim mas naum vingou:

public class TesteHeranca {
	public class Funcionario {
		String Nome;
	}

	public class Diretor extends Funcionario { //Heranç
		int nivel;	
	}

	//Herança
	Funcionario Func1 = new Funcionario();
	Diretor Func2 = new Diretor();
	
	//Poliformismo
	Funcionario Func3 = new Diretor(); //Poliformismo, naum acessa os atributos adicionais de Diretor, mas elas existem
	
	public static void main(String[] args) {
	
	//Coleções Heterogêneas
	Funcionario Funcs[] = new Funcionario[100];

                //Aki naum rola e eu peguei de um livro.
	Funcs[0] = new Funcionario();
	Funcs[1] = new Diretor();
	}
}

naum vingou... mestre dos magos me ajude

28 Respostas

danieldestro

Exemplo sobre que “tipo de herança”?

Herança, em Java, se dá pelo uso da palavra extends na declaração da classe, indicando qual a classe que a primeira vai estender (ou herdar as características - atributos e métodos).

Qual a dúvida?

israelwm

A dúvida é sobre Abstract e Interface, naum sei pra q serve e nem quando usa-las, um exemplo funcional em java pra ter uma idéia, já mata a charada.

caiofilipini

Sobre interfaces:
http://www.guj.com.br/java.artigo.123.1.guj

[]'s

cv1

israelwm, tome vergonha na cara e pare de usar variaveis com nomenclatura nojenta: http://java.sun.com/docs/codeconv/

Sobre abstract classes e interfaces:

public abstract class Foo { public abstract void fubar(); } public class Bar extends Foo { public void fubar() { } }

A melhor explicacao que eu posso dar pra isso eh: compre um livro. E leia. :mrgreen:

keller

Tutorial do GUJ sobre Interfaces:
http://www.guj.com.br/java.artigo.123.1.guj

E sobre abstract bem que você poderia dar uma procurada no google… :smiley:

Valeu? até mais! :wink:

fbanin

Esse exemplo não compila pq as classes Funcionarios e Diretor estão dentro da sua classe, experimenta retirá-las… Ai compila e roda na buena… abre uma classe só para funcionario e outra só para diretor

O abstract, qdo vc diz que determinado método em sua classe é abstrata, toda classe que extender essa classe é obrigado a implementá-la…

Tipo, na sua classe funcionario, se vc tivesse colocado um método:

public abstract geraCodigo();

Note que o método não pode ter corpo e deve terminar por “;”, qdo vc extender essa classe a classe diretor vc é obrigado a implementar esse método, senão tera um erro de compilação…

Serve para vc obrigar um cara a implementar, por exemplo, podia ser um validador de funcionário, só que para validar um diretor (por exemplo) seria diferente da validação de um faxineiro… ai vc força o programador que esta desenvolvendo as duas subclasses a implementar um validador para cada…

Já as interfaces só tem métodos abstratos, não podem conter outro tipo de método e os atributos são sempre do tipo final, ou seja, são constantes… e vc não pode extende-la, tera que implementar, no lugar do Extends vc coloca Implements…

Isso é para vc poder fazer um tipo de herança multipla…

Ok ?

israelwm

cv:
israelwm, tome vergonha na cara e pare de usar variaveis com nomenclatura nojenta: http://java.sun.com/docs/codeconv/

Sobre abstract classes e interfaces:

public abstract class Foo { public abstract void fubar(); } public class Bar extends Foo { public void fubar() { } }

A melhor explicacao que eu posso dar pra isso eh: compre um livro. E leia. :mrgreen:

é soh um teste, eu joguei ae soh pra ver.

israelwm

fbanin:
Esse exemplo não compila pq as classes Funcionarios e Diretor estão dentro da sua classe, experimenta retirá-las… Ai compila e roda na buena… abre uma classe só para funcionario e outra só para diretor

O abstract, qdo vc diz que determinado método em sua classe é abstrata, toda classe que extender essa classe é obrigado a implementá-la…

Tipo, na sua classe funcionario, se vc tivesse colocado um método:

public abstract geraCodigo();

Note que o método não pode ter corpo e deve terminar por “;”, qdo vc extender essa classe a classe diretor vc é obrigado a implementar esse método, senão tera um erro de compilação…

Serve para vc obrigar um cara a implementar, por exemplo, podia ser um validador de funcionário, só que para validar um diretor (por exemplo) seria diferente da validação de um faxineiro… ai vc força o programador que esta desenvolvendo as duas subclasses a implementar um validador para cada…

Já as interfaces só tem métodos abstratos, não podem conter outro tipo de método e os atributos são sempre do tipo final, ou seja, são constantes… e vc não pode extende-la, tera que implementar, no lugar do Extends vc coloca Implements…

Isso é para vc poder fazer um tipo de herança multipla…

Ok ?

Era tudo o q queria e ele explicou ainda mais

valeu cara pela paciencia, vc mostrou ser um usuario co cruj bom…

viva o fbanin (q gay isso)

renatosilva

Israel, se você estiver com saco pra ler em inglês:

Interfaces & Abstract Classes

http://www.churchillobjects.com/c/11003.html

israelwm

Segue o código, eu fiz como me falou e ainda naum funciona porq? e outra coisa, eu uso o eclipse ai no metodo construtor do Funcionarios e Direto, apareçe akele queijinho, dizendo "This method has constructor name".

abstract class Pessoas {
	String Nome;
	public abstract void setNome(String nome);
}

class Funcionarios extends Pessoas {
	public void setNome(String nome){
		this.Nome = "Sofredor: " + nome;
	}
	public void Funcionarios(String nomeStr) {
		setNome(nomeStr);
	}
}


class Diretor extends Pessoas { //Herança
	public void setNome(String nome){
		this.Nome = "Sugador de pobre: " + nome;
	}
	
	public void Diretor(String nomeStr) {
		setNome(nomeStr);
	}
}

public class Heranca {
	public static void main(String[] args) {
		Funcionarios func = new Funcionarios("João do Caminhão");
		Diretor diretor = new Diretor("Paulo Duarte da Menga Pinto");
	}
}
danieldestro

Aqui:

public void Diretor(String nomeStr)

Não existe este void. O construtor não tem tipo de retorno na sua declaração.

E procure criar suas classes em fontes (arquivos) separados.

israelwm

Pois é isso sempre me dizem, mas naum sobrecarrega o sistema? imagine se eu tiver q fazer classes de classes de classes, quantos mil arquivos terei q fazer?

danieldestro

AUhauhuAHAUhuahUAHuHAUHAuhauhUAhUAHUAH
Eu tenho um sistema aqui com mais de 200 classes e é pouco ainda.

israelwm

Não existe este void. O construtor não tem tipo de retorno na sua declaração.

Valeu cara, agora foi, eu sei q saum coisas simples, mas ainda estou me acostumando com a hierarquia do java

valeu…

israelwm

danieldestro:
AUhauhuAHAUhuahUAHuHAUHAuhauhUAhUAHUAH
Eu tenho um sistema aqui com mais de 200 classes e é pouco ainda.

Nosssaa :shock:

mas entaum saum 200 arquivos? e naum dah pau?

Rafael_Nunes

Atualmente estamos em 1780 classes aqui, sem contar os .jsp. Mas como a modelagem aqui foi um tanto precária, isso deveria ter ao menos a metade.

danieldestro

israelwm:
Nosssaa :shock:
mas entaum saum 200 arquivos? e naum dah pau?

Santa inocência!

israelwm

Nosssssaaaaa, eh muita coisa cara, vc naum se perde qndo está programando? tipo, deve ter um arquivo com somente 3 linhas entaum huauhahuaa q coisa.

Rafael_Nunes

Que nada, é só criar uma estrutura de pacotes intuitiva que fica bem simples de se achar…

danieldestro

israelwm, é que nem todos os sistemas são programinhas de ordenar um array e imprimir na tela.

E um sistema desse não foi feito por apenas uma pessoa. Geralmente tem um time de desenvolvedores.

Bem-vindo à Matrix!

israelwm

danieldestro:
israelwm, é que nem todos os sistemas são programinhas de ordenar um array e imprimir na tela.

E um sistema desse não foi feito por apenas uma pessoa. Geralmente tem um time de desenvolvedores.

Bem-vindo à Matrix!

uhauhauhaua, acho q vou mudar de profissão, prefiro ficar sem saber como é a realidade…

cv1

Quer mudar de profissao de vez? Bem-vindo ao projeto em que eu estou trabalhando. Da ultima vez que eu contei, 22489 classes. Aproximadamente 150mb de codigo-fonte (ou seja, contando apenas *.java, *.xml e *.properties). A gente usa IntelliJ IDEA pq o compilador do Eclipse nao aguenta o tamanho do projeto - e nem pense em trabalhar com menos de 1gb de RAM.

Tudo bem, a aplicacao tem muita funcionalidade, tambem - eh o sistema de ponto-de-venda e administracao da maior cadeia de lojas de eletronicos europeia… mas ateh aih, se a gente ta aguentando bem ate aqui, nao vejo pq vc deveria ter medo :wink:

fmeyer

atualmente no projeto da empresa … 2368 classes …

ps … 2369

fmeyer

2370… e contando

cv1

Nem adianta contar ou competir… eu ganhei, ja :mrgreen:

pcalcado

Segundão!

israelwm

Oloco, vou começar a criar uma classe para cada variável pra ver se chego lá, nos 22000 que o cv chegou,

Oloco meu!

vc trabalha aonde cv? se naum quiser responder eu entendo, a pergunta é muito metida mesmo.

louds

Hmm, aqui no projeto que tou participando tem mais de 2000 fontes c++, 1300 java, quase 300 xml e mais de 1700 templates de páginas. 95% nunca vi na vida.

O volume de código em PL1, cobol, natural e stored procedures oracle, db2 e adabas eu desconheço.

Criado 12 de abril de 2005
Ultima resposta 12 de abr. de 2005
Respostas 28
Participantes 11