Classe Abstrata X Interface

4 respostas
L

Uma dúvida conceitual de POO: O que é e qual a diferença de uma classe abstrata e uma classe Interface? Ambas não podem ser instanciadas ou somente as abstratas?

4 Respostas

F

dae kra,
a diferenca eh q uma classe pode extender apenas a uma classe, e implementar varias interfaces
vc pode extender a apenas uma classe (se a classe n extender explicitamente a nenhuma classe, ela extende implicitamente a classe Object), e pode implementar a qntas interfaces forem nessecarias.

qndo uma classe extende a outra, assim q eh feita uma instancia de uma subclasse, se a primeira linha do construtor n for uam chamada explicita ao construtor da superclasse (chamando super(), passando parametros se nessecario), sera feita uma chamada implicita, o q garante q o construtor de todas as superclasses de uma classe sera executado, o q n acontece com as interfaces…

C

Vou retirar algumas coisas do livro da Katty (tem o link no forum de certificação, dá uma olhada lá).

When you create an interface, you?re defining a contract for what a class can do,
without saying anything about how the class will do it. An interface is a contract.
You could write an interface Bounceable, for example, that says in effect, ?This
is the Bounceable interface. Any class type that implements this interface must agree
to write the code for the bounce() and setBounceFactor() methods.?

By defining an interface for Bounceable, any class that wants to be treated as a
Bounceable thing can simply implement the Bounceable interface and provide code
for the interface?s two methods.
Interfaces can be implemented by any class, from any inheritance tree. This lets
you take radically different classes and give them a common characteristic. For
example, you might want both a Ball and a Tire to have bounce behavior, but
Ball and Tire don?t share any inheritance relationship; Ball extends Toy while
Tire extends only java.lang.Object. But by making both Ball and Tire
implement Bounceable, you?re saying that Ball and Tire can be treated as, ?Things
that can bounce,? which in Java translates to ?Things on which you can invoke the
bounce() and setBounceFactor() methods.? Figure 2-8 illustrates the
relationship between interfaces and classes.
Think of an interface as a 100-percent abstract class. Like an abstract class, an
interface defines abstract methods that take the form,
abstract void bounce(); // Ends with a semicolon rather than curly braces
But while an abstract class can define both abstract and nonabstract methods,
an interface can have only abstract methods. Another place interfaces differ from abstract classes is that interfaces have very little flexibility in how the methods and
variables defined in the interface are declared. The rules are strict, but simple:
■ All interface methods are implicitly public and abstract.
■ Interface methods must not be static.
■ You do not need to actually type the public or abstract modifiers in
the method declaration, but the method is still always public and abstract.
■ All variables defined in an interface must be public, static, and final?in
other words, interfaces can declare only constants, not instance variables.
■ Because interface methods are abstract, they cannot be marked final,
native, strictfp, or synchronized.
■ An interface can extend one or more other interfaces.
■ An interface cannot extend anything but another interface.
■ An interface cannot implement another interface or class.
■ An interface must be declared with the keyword interface.
■ Interface types can be used polymorphically (see Chapter 5 for more details).

T

“Uma dúvida conceitual de POO: O que é e qual a diferença de uma classe abstrata e uma classe Interface? Ambas não podem ser instanciadas ou somente as abstratas?”

Blz galera?

Kra, falei com um professro de engenharia de software, e ele me falou que esse conceito de interface não faz parte do paradigma de orientação a objetos…ele disse que interface serve como um “contrato”, onde estão pré-fixados os atributos, os nomes dos métodos, e seus parâmetros…

já na classe abstrata, onde não há instanciação( o quer caracteriza uma classe ser abstrata, é o fato de ela possuir pelo menos um método com a assinatura apenas…por exemplo :
public void setAtributo(int qqerCoisa) ; ou seja sem o corpo ou implementação )
portanto só podem gerar objetos suas subclasses( lembrando é claro de sobrescrever este método citado acima), para poder gerar uma classe concreta…(isso é herança, que faz parte do paradigma OO).
já a interface, além de obrigar vc a desenvolver todos os métodos, mostra para qualquer pessoa que queira testar a sua classe a maneira como ela poderá invocar os métodos…
espero que tenha ajudado.

falows

J

Olha cara, a diferença é muito fácil.
Na interface você só coloca assinaturas por exemplo:

public interface Pessoa(){
public String getNome();

public String getCpf();

    public void setNome(String nome);

}

Ou seja, vc n implementa os métodos, apenas coloca-se as assinaturas.
Ai quando vc for criar uma classe que implemente essa interface então vc faz o seguinte:

public class Homem implements Pessoa(){

public String getNome(){

 //Aqui vc tem que implementar os o metodo que vc declarou na interface.

}

}

da mesma forma vc tem que fazer para os outros métodos, pois quando vc diz que uma classe implementa uma interface, vc tem que implementar todos os métodos dela. A interface fica como uma espécid de “contrato” como alguns já mencionaram acima.

Já as classes abstratas, pode tanto conter método concretos, ou seja, implementados como uma classe normal, quanto assinaturas.

<<<<<Javamen1>>>>>

Criado 30 de abril de 2004
Ultima resposta 4 de mai. de 2004
Respostas 4
Participantes 5