2.6 Implementado una interfaz - ajpaez/OCA GitHub Wiki
(OCA Objective 7.6)
Toda clase que implemente una interfaz debe proporcionar implementaciones de todos los métodos de la interfaz. Las clases que implemente una interfaz deben de seguir las mismas reglas que una clase que extienda de una clase abstracta.
Para tener una correcta implementación debe seguir las siguientes reglas:
- Proporcionar implementaciones no abstractas para todos los métodos de la interfaz declarada.
- Respetar todas las reglas para la sobreescritura:
- Declarar las excepciones no checked en los métodos que declare la interfaz.
- Mantener la firma del método de la interfaz, y mantener el mismo tipo devuelto ( o subtipo)
- Una clase puede implementar varias interfaces.
- Una interfaz puede extender de otra interfaz, pero nunca implementar cualquier cosa. De esta forma, la primera clase que implemente la interfaz que hereda, debe de implementar también todos los métodos de las superinterfaces.
Pueden existir clases implementadoras abstractas como la siguiente:
abstract class Ball implements Bounceable { }
Una clase abstracta que implemente una interfaz puede no declarar los métodos de la interfaz y ser la primera sublcase la que los declare.
Así, una especialización de la clase Ball, sería:
class BeachBall extends Ball {
// Even though we don't say it in the class declaration above,
// BeachBall implements Bounceable, since BeachBall's abstract
// superclass (Ball) implements Bounceable
public void bounce() {
// interesting BeachBall-specific bounce code
}
public void setBounceFactor(int bf) {
// clever BeachBall-specific code for setting
// a bounce factor
}
// if class Ball defined any abstract methods,
// they'll have to be
// implemented here as well.
}
Si se trata de una clase abstracta la que implementa una interfaz, dicha clase puede implementar todos, cualquiera o ninguna de los métodos de las interfaces.
usos de extends e implements | Result |
---|---|
class Foo { } | // OK |
class Bar implements Foo { } | // No! Can't implement a class |
interface Baz { } | // OK |
interface Fi { } | // OK |
interface Fee implements Baz { } | // No! an interface can't implement an interface |
interface Zee implements Foo { } | // No! an interface can't implement a class |
interface Zoo extends Foo { } | // No! an interface can't extend a class |
interface Boo extends Fi { } | // OK. An interface can extend an interface |
class Toon extends Foo, Button { } | // No! a class can't extend multiple classes |
class Zoom implements Fi, Baz { } | // OK. A class can implement multiple interfaces |
interface Vroom extends Fi, Baz { } | // OK. An interface can extend multiple interfaces |
class Yow extends Foo implements Fi { } | // OK. A class can do both (extends must be 1st) |
class Yow extends Foo implements Fi, Baz { } | // OK. A class can do all three (extends must be 1st) |