tento entender classes abstratas e não consigo,
e o object, varíveis de tipo object eu não sei como funciona 
alguém entende?
valeu
tento entender classes abstratas e não consigo,
e o object, varíveis de tipo object eu não sei como funciona 
alguém entende?
valeu
Não consegue pq? Dá algum erro? Você precisará implementar todos os métodos abstratos.
Variáveis do tipo object podem conter qualquer tipo de objeto. Todos os objetos são filhos de object.
Não, apenas não consigo entender o conceito de classes abstratas
nem sei utilizar varíaveis do tipo object =/
Classes abstratas modelam um conceito, mas que o comportamento exato ainda não é conhecido.
Por exemplo, se eu te disser que eu tenho uma ave em casa, e perguntar qual é o barulho que essa ave faz, o que você me responde?
Note que em momento nenhum você teve dúvida de que a ave seria capaz de fazer barulho. Isso porque toda ave faz barulho.
Mas… vc teve dúvida de qual barulho seria, pois você não sabia que ave eu teria na mão.
A classe Ave é uma classe Abstrata. Ela modela o conceito do que é uma ave, embora ainda não saibamos exatamente quais são os casos reais que implementam esse conceito. No exemplo citado, poderíamos modela-la assim:
public abstract class Ave {
public abstract void fazerBarulho();
}
Note que pela implementação acima, sabemos o que é uma ave, mas não sabemos exatamente que barulho a ave mas. Mas uma certeza nós temos, toda ave faz algum tipo de barulho.
Se eu te dissesse “a minha ave é uma Columbina”, então você saberia que barulho a ave faz. Essa ave é comum no cerrado e canta “Fogo apagou” (também conhecida como Rolinha Carijó). Então, a implementação da classe Columbina poderia ser:
public class Columbina extends Ave {
public void fazerBarulho() {
System.out.println("Fogo apagou!");
}
}
Então, o que acontece quando dizemos que “A minha ave á uma columbina”?. Programamos essa afirmação da seguinte forma:
Ave ave = new Columbina();
Se eu fizer:
ave.fazerBarulho();
Irá imprimir “Fogo-apagou!” na tela, já que a ave em questão é mesmo uma Columbina.
Poderíamos perguntar que barulho a ave faz através de um método:
public void perguntaOBarulhoDaAve(Ave ave) {
System.out.println("Que barulho essa ave faz?");
ave.fazerBarulho();
}
Note que para esse método, pouco importa que ave seja passada no parâmetro. O que importa é que seja uma ave. Como toda ave faz barulho, o método pode chamar fazerBarulho() tranquilamente (já que toda ave faz barulho).
Então, poderíamos chamar o método passando uma Columbina, um Rouxinol, ou uma Galinha, que todas fariam barulhos. Diferentes, pois são aves diferentes, mas barulhos. Essa característica, da variável ave poder se comportar como o que tiver em seu conteúdo é chamada de polimorfismo.
Se parar para pensar um pouco, com esses conceitos, você logo entende para que servem variáveis do tipo Object.
A Viny agora entendi, eu tava usando uma varíavel object como o professor colocou,
mas eu não entendia pra que, como ele comentou que a classe que eu estava implementando
era pra ordenar qualquer tipo de objeto das classes que fizemos, é como sua classe Ave;
Logo a minha, pode através de uma varíavel
object ordenar qualquer tipo de objeto que eu passar, só que eu não implementei exatamente qual seria
o objeto a ordenar, por isso a variável object.
É como a Ave , tá implementado que ela faz barulho , só não sabemos qual ainda . .
Obrigadão, sua explicação deu pra fazer uma analogia boa com o código !!
Boa noite JspBaby.
Vamos começar por Object
[color=darkblue]Object[/color] nada mais é do que a [color=darkred]Classe mãe de todas as classes do Java[/color].
Como assim :?:
Em linguagens Orientada a Objetos, existe uma hierarquia de classes, uma herdando sempre de outra classe, a classe Object é digamos assim um ponto de partida de todas as classes existentes no Java, ou seja, todas as classes em Java tem na sua herança hierárquica a classe Object, inclusive todas as classes que voce cria sem especificar qualquer herança.
Xiiii, deu nó :!: :!: :!:
Desatando o nó.
Vamos supor que voce cria quaquer classe assim em Java:
public class MinhaClasse {
....
....
....
}
Em outras palavras a classe Object está implicitamente herdada nesta classe, ou seja, a sintaxe “class” determina não só a declaração de classe, como também, se não houver explicitamente uma herança definida (extendida) a sintaxe “class” determina que herde (extenda) de Object implicitamente. É como se voce declarasse assim:
public class MinhaClasse extends Object {
....
....
....
}
Se voce estiver usando o NetBeans, como o código Java é um código aberto, escreva a sinstaxe Object e pressione a tecla “Ctrl” simultaneamente pressione o botão direito do mouse em cima dela, que voce abrirá toda o código da classe Object definido.
Passamos agora Classe Abstrata.
[color=darkblue]Classe Abstrata[/color] é toda classe que possui alguns métodos que são apenas declaradas e não implementados, veja bem, eu disse apenas alguns métodos, isto porque toda classe abstrata pode ter alguns métodos abstratos e outros não. A finalidade de voce declarar alguns métodos abstratos em uma classe abstrata, é que quando padronizamos algumas classes, geralmente não podemos padronizar alguns métodos que tem comportamentos diferentes e divergentes de certas padronizações, diferenciando-se apenas de alguns métodos padrões. O exemplo melhor e mais prática sobre isto e representar uma classe Animal, assim:
public abstract class Animal {
public void andar(){
System.out.println("Estou andando");
}
public void alimentar(){
System.out.println("Estou me alimentando de "+refeicao());
}
public abstract void idAnimal();
public abstract String refeicao();
public abstract void falar();
}
Repare que na classe animal acima, tenho dois métodos que foram implementados (andar e alimentar) e outros tres abstratos, ou seja, sem implementação (idAnimal, refeicao e falar), isto porque a classe Animal é genérica a todos os animais, uma classe padrão que defini todos os comportamentos padrões de todos os animais, porém existem outros comportamentos (Métodos) que não podem ser padrões, por exemplo; a fala do animal (rugir, piar, miar, latir), e de sua refeição (Carne, ervas), bem como de sua identificação (Leão, Porco, Galinha, Cachorro, Vaca e etc.).
Repare também que esta classe por ser Abstrata, não pode ser instanciada, isto por causa dos métodos abstratos que não foram implementados, ela somente pode ser herdada, assim:
A classe Leao;
public class Leao extends Animal {
public void idAnimal(){
System.out.println("Eu sou o Leão");
}
public String refeicao(){
return "Carne";
}
public void falar(){
System.out.println("Estou rugindo");
}
}
A classe Porco;
public class Porco extends Animal {
public void idAnimal(){
System.out.println("Eu sou o Porco");
}
public String refeicao(){
return "Ração";
}
public void falar(){
System.out.println("Estou rosnando");
}
}
A classe Galinha
public class Galinha extends Animal {
public void idAnimal(){
System.out.println("Eu sou a Galinha");
}
public String refeicao(){
return "Milho";
}
public void falar(){
System.out.println("Estou piando");
}
}
A classe Vaca
public class Vaca extends Animal {
public void idAnimal(){
System.out.println("Eu sou a Vaca");
}
public String refeicao(){
return "Capim";
}
public void falar(){
System.out.println("Estou mugindo");
}
}
A classe Cachorro
public class Cachorro extends Animal {
public void idAnimal(){
System.out.println("Eu sou o cachorro");
}
public String refeicao(){
return "Ração";
}
public void falar(){
System.out.println("Estou latindo");
}
}
Agora vamos instanciar cada animal, veja bem, cada animal e não a classe animal, assim:
public class Main {
public static void main(String[] args) {
Leao leao = new Leao();
leao.idAnimal();
leao.andar();
leao.alimentar();
Porco porco = new Porco();
porco.idAnimal();
porco.andar();
porco.alimentar();
Galinha galinha = new Galinha();
galinha.idAnimal();
galinha.andar();
galinha.alimentar();
Vaca vaca = new Vaca();
vaca.idAnimal();
vaca.andar();
vaca.alimentar();
Cachorro cachorro = new Cachorro();
cachorro.idAnimal();
cachorro.andar();
cachorro.alimentar();
}
}
Execute o programa e veja o que acontece.
Repare que em cada animal eu invoquei o método andar e nem o método alimentar que não foram definidos na super classe Animal como abstratro e sim implementados e também não precisou serem implementados nas classes herdadas, porém na instanciação de cada classe herdada eles puderam ser invocados, visto que eles herdaram os métodos da super classe Animal.
Se voce instanciar uma dessas classes, por exemplo, a classe Cachorro, quando voce digita um ponto ao lado da instância cachorro, veja que aparecerá varios outros métodos que não foram definidos nem na super classe Animal, como por exemplo o método “toString()”, isto porque lembra do que eu te falei da classe Object :?: Pois é cada classe de animal herda de Animal, porém a classe Abstrata Animal herda também de Object, e assim todos os métodos da hierarquia da herança são herdados em toda a hierarquia de classes.
Obs: Todos os métodos Abstratos de uma classe Abstrata, tem que ser obrigatoriamente declarados, não como abstratos, e implementados nas classes herdadas.
Se não ficou claro, é só perguntar de novo.