2010-12-14 16 views
18

duplicados posibles:
Abstract class and Interface class?
Java: interface/abstract classes/abstract method¿cuál es el uso real de la interfaz en java?

En Java, sea cual sea el uso de la interfaz se ha cumplido por clase abstracta. Sé que una ventaja de las interfaces es que si implementamos una interfaz, también podemos extender otra clase. ¿Hay algún otro uso o ventaja de la interfaz en Java?

+1

Esta pregunta se ha hecho muchas veces antes, en diferentes formas. –

+0

Para implementar una interfaz, todos los métodos definidos por esa interfaz deben aparecer en su código fuente antes de que la clase se compile correctamente. De esta manera, la interfaz permite que una clase se vuelva más formal sobre el comportamiento que promete proporcionar. –

Respuesta

23

Lo que te gusta: miles de métodos abstractos en una clase abstracta y heredar esta clase o hacer tantas interfaces para los métodos abstractos específicos y utilizar sólo aquellos que quieren heredando tantas interfaces como sea necesario ...

abstract class A 
{ 
//thousands of abstract method(); 
abstract methodA(); 
abstract methodB(); 
abstract methodC(); 
} 

//OR 
interface ForOnlymethodA 
{ 
void methodA(); 
} 
interface FormethodBandmethodC 
{ 
void methodB(); 
void methodC(); 
} 

Por lo tanto, utilice ese método solo lo que necesita heredando una interfaz en particular, si hereda las clases Abstract, entonces heredará innecesariamente todos los métodos que no necesita en una clase y puede ser necesario en algunas otras clases ..

7

Se pueden implementar múltiples interfaces, pero solo se puede extender una clase. Una clase completamente abstracta se parece mucho a una interfaz, excepto que una clase abstracta puede contener variables.

Realmente depende de lo que necesita. C++ le permite extender tantas clases como desee y se convierte en un desastre. Lo bueno de tener una sola superclase es que solo hay otro conjunto de implementaciones del que tenga que preocuparse (incluso si el padre tiene un padre, la combinación particular del padre se convierte en su padre ...)

Las interfaces permiten un objeto para jugar muchos roles, pero no permiten la reutilización del código.

Es realmente para simplificar el pensamiento sobre la herencia. Sobre la balanza, creo que lo hicieron bien.

+0

gracias por proporcionar información valiosa. – kandarp

1

Las interfaces permiten la nominative typing en Java para trabajo a través declass hierarchies disjuntos.

Esto es debido a la "single inheritance" limitación en una jerarquía de clases y "tipos cerradas". Mantendré la lengua en subtype polymorphism y la implementación de Java ;-)

Existen otras soluciones a este problema, como el tipado dinámico, el tipado estructural, la herencia múltiple y los rasgos, etc. Cada enfoque tiene ventajas y desventajas . Las interfaces fueron solo el enfoque que tomó Java.

+0

gracias por contestar mi post – kandarp

0

interfaz de Java - proporciona el data encapsulation lo que significa que la implementación de los métodos no se puede ver. La clase que extiende esta interfaz debe implementar todos los métodos declarados en ella.

más información: wiki answer

0

Ventajas con respecto a una clase abstracta? excepto el hecho de que puede implementar múltiples interfaces pero extender solo una clase (abstracta o no), es lo mismo que una clase abstracta que todos sus métodos son abstractos y públicos

51

Las interfaces le permiten usar clases en diferentes jerarquías, polymorphically .

Por ejemplo, supongamos que tiene la siguiente interfaz:

public interface Movable { 
    void move(); 
} 

Cualquier número de clases, través de jerarquías de clases podría implementar Movable a su manera específica, y aún así ser utilizado por alguna persona que llama en un uniforme camino.

Así que si usted tiene las dos clases siguientes:

public class Car extends Vehicle implements Movable { 
    public void move() { 
     //implement move, vroom, vroom! 
    } 
} 

public class Horse extends Animal implements Movable { 
    public void move() { 
     //implement move, neigh! 
    } 
} 

Desde la perspectiva de la persona que llama, es sólo un Movable

Movable movable = ...; 
movable.move(); //who am I? 

espero que esto ayude.

+1

gracias por ayudarme a entender la diferencia entre la interfaz y el resumen con el ejemplo adecuado. – kandarp

Cuestiones relacionadas