Estender e descender

Passo 2
Com os lucros gerados, a pousada foi remodelada, detal forma que metade dos quartos
passou a ter banheira. Entretanto, o lucro não era suficiente para promover reformas nos
chalés.
Os quartos que possuem banheira têm tarifa 18% superior aos que não possuem e são
numerados de 1 a 25.
Sabendo-se disso, altere o programa da etapa anterior, criando uma classe Aluguel
que será a mais genérica e da qual as outras classes devem descender. Esta classe deve ter um
método abstrato que deve retornar o valor a ser cobrado pelas diárias.

estender eu seu oque é, mas e descender eu não sei

você é descendente de que? italiano? japonês? húngaro?

alguém que descende de um outro alguém seria o filho.

no caso eu creio que seja a mesma coisa.
Classe Filho descende de Classe Pai
Classe Filho estende a Classe Pai

ok!

Então seira a mesma coisa de extents, vou herdar tudo da minha classe mais genérica?

Sim, a classe que descender, será a classe que estende à Aluguel.

herança… uma_classe Extends de_outra

Uma classe que implements outra tambem é considerado como hernaça.

““Esta classe deve ter um método abstrato que deve retornar o valor a ser cobrado pelas diárias.””

Mas, o meu projeto esta pedindo uma classe que tenha um método abstrato

ai vai minha pergunta, todo método abstrato tem que ser de uma classe abstrata ???;

Mas uma classe não implementa outra classe, implementa interface e isso não é herança.

Se um método é abstrato ele obrigatoriamente pertence a uma classe abstrata, porém uma classe abstrata pode conter métodos concretos (concretos sendo não-abstratos) também.

Uma classe que implements outra tambem é considerado como hernaça.[/quote]

Calma, muita calma nessa hora. Primeiro, que eu tenho certeza que tu se refere a interface, correto ? Jóia.
Todo método declarado em uma interface é abstrato e público, mesmo que não seja declarado explicitamente. Dessa forma, a classe concreta (classe que implementa a interface) deve implementar, obrigatoriamente, todos os métodos declarados.

Por sua vez, uma classe filha pode desconhecer métodos da sua classe Pai, vide métodos default ou privados, concorda colega?
Eu entendo a interface como um contrato e não como herança.

Uma classe que implements outra tambem é considerado como hernaça.[/quote]

Não neste caso, extends é herança de código (atributos e métodos), implements é para interface. Não estamos lidando aqui, com interface…

[quote=digaoneves][quote=PauloJava2012]
““Esta classe deve ter um método abstrato que deve retornar o valor a ser cobrado pelas diárias.””

Mas, o meu projeto esta pedindo uma classe que tenha um método abstrato

ai vai minha pergunta, todo método abstrato tem que ter uma classe abstrata ???;
[/quote]
Se um método é abstrato ele obrigatoriamente pertence a uma classe abstrata, porém uma classe abstrata pode conter métodos concretos (concretos sendo não-abstratos) também.

[/quote]

Bom, exemplificando…

public abstract class Teste { public static void print() { System.out.println("Teste"); } }

Classe abstrata com um método estático e não abstrato.

nossa agora me deu um branco rsrs.

que isso ???

Classes abstrata não deveria se assim não?

ou isso é interface

public abstract class Aluguel {

 public abstract double valorCobrado();

}

[quote=PauloJava2012]Classes abstrata não deveria se assim não?

ou isso é interface

public abstract class Aluguel {

 public abstract double valorCobrado();

}
[/quote]

Amigo, ó: http://www.caelum.com.br/apostilas/
Apostila FJ-11. Leia com atenção, aprenda o básico e lhe será extremamente útil.

[code]public interface Teste {}

public abstract class Teste {}[/code]

Bem diferentes hein ?
O que eu fiz ali foi mostrar á você que é possível ter uma classe abstrata sem método abstrato, o que não é possível é ter um método abstrato dentro de uma classe que não seja abstrata, compreende ? :slight_smile:

sim, muito!

Uma classe abstrata pode ter metodos concletos e metodos abstratos (assinatura de metodos).

//Metodo concreto
public void calcular(int x, int y){ codigo que faz a conta}
//Metodo Abstrato, quando uma classe que não for abstrata extender  ela tem implementar o metdodo
public void fazAlgo();

Sobre interfaces ela é uma classe 100% abstrata.

Uma classe que implements uma interface deve implementar todos os métodos dessa classe, exceto se essa classe for uma interface tambem.

Se uma classe implements alguma classe ela herda todos os metodos.

Exemplo:

public interface Animal{ void comer(); void andar(); void dormir(); }

A classe concleta que implements Animal deve implementar todos os metodos (comer, andar, dormir).

Hum… mais ou menos.
Melhor não pensar assim, para evitar confusão.
Isso é porque em Java não há herança múltipla de classes, e dizer que “interface é uma classe 100% abstrata” é algo que pode confundir a cabeça de muita gente (exceto aqueles poucos que sabem C++ e Java ao mesmo tempo e não confundem uma coisa com a outra).

Bom, vamos la…

Herança é quando uma classe herda de uma classe pai, todos os seus atributos e métodos, normalmente ocorre de uma classe genérica para uma mais específica.

Como de Animal para Cachorro. Um cachorro é um animal, portanto a herança faz sentido, não ?

Agora interface é como um contrato a ser cumprido, quando uma classe implementa uma interface, ela está dizendo que cumprirá tudo o que foi definido naquela interface, mas não chega a ser exatamente herança.

Ex:[code]public interface Quicavel{

public void quicar();

}

public class Bola implements Quicavel{

public void quicar(){
    System.out.println("Bola quicando!");
}

}

public class Pneu implements Quicavel{

public void quicar(){
    System.out.println("Pneu quicando!");
}

}[/code] Tente entender a diferença, a “habilidade” de quicar, ou poder quicar, é uma característica em comum entre as duas classes, ou seja, além dessa característica, uma classe não tem nada a ver com a outra.

Você poderia fazer uma classe Bola, que tem o método quicar, e fazer Pneu herdar de Bola esse método, mas se for pensar, isso não faz sentido, pois um Pneu não é uma Bola.

Só um aviso pra tomar cuidado quando usar herança.

Se eu falei alguma besteira aqui, por favor me corrijam.

EDIT: Só pra constar, eu tirei esse exemplo do livro da Kathy Sierra e do Bert Bates, pra certificação SCJP 6, onde é usada a interface Bounceable como exemplo.

[quote=digaoneves]Bom, vamos la…

Herança é quando uma classe herda de uma classe pai, todos os seus atributos e métodos, normalmente ocorre de uma classe genérica para uma mais específica.

Como de Animal para Cachorro. Um cachorro é um animal, portanto a herança faz sentido, não ?

Agora interface é como um contrato a ser cumprido, quando uma classe implementa uma interface, ela está dizendo que cumprirá tudo o que foi definido naquela interface, mas não chega a ser exatamente herança.

Ex:[code]public interface Quicavel{

public void quicar();

}

public class Bola implements Quicavel{

public void quicar(){
    System.out.println("Bola quicando!");
}

}

public class Pneu implements Quicavel{

public void quicar(){
    System.out.println("Pneu quicando!");
}

}[/code] Tente entender a diferença, a “habilidade” de quicar, ou poder quicar, é uma característica em comum entre as duas classes, ou seja, além dessa característica, uma classe não tem nada a ver com a outra.

Você poderia fazer uma classe Bola, que tem o método quicar, e fazer Pneu herdar de Bola esse método, mas se for pensar, isso não faz sentido, pois um Pneu não é uma Bola.

Só um aviso pra tomar cuidado quando usar herança.

Se eu falei alguma besteira aqui, por favor me corrijam.

EDIT: Só pra constar, eu tirei esse exemplo do livro da Kathy Sierra e do Bert Bates, pra certificação SCJP 6, onde é usada a interface Bounceable como exemplo.[/quote]

Concordo com vc, tava confundindo herança com É-UM, no proprio livro na parte de Relacionamento É-UM diz o seguinte (O conceito É-UM é baseado na herança de Classes ou Implementação de Interfaces. O termo É-UM é uma maneira de dizer, “esse item é um tipo desse outro”