Al definir clases esperamos que estas cumplan todos los requisitos necesarios, ni más ni menos. Si creamos una clase llamada Imagen, esta debe tener atributos que la identifiquen: nombre, tamaño, y url.
class Imagen{
String nombre
String tamanyo
String url
}
Ahora una clase llamada TestImage con método main.
class TestImage{
static main(args){
def imagen=new Imagen(nombre:"Groovy.jpg",tamanyo:"45kb",url:"http://misimagenes.com.mx")
}
//también podría haber sido así
def imagen=new Imagen()
imagen.with{
nombre="Groovy.jpg"
tamanyo="45kb"
url="http://misimagenes.com.mx"
}
}
Al parecer no existe problema alguno, esta clase cumple su objetivo. Ahora ¿qué pasaría si necesitaramos agregarle alguna 'funcionalidad' extra? para ello usaremos la herencia.
Vamos a crear:
- Una clase base (o padre) llamada Heroe
- Dos clases hijas llamadas Superman y Batman
- Dos interfaces llamadas Superpoderes y Habilidades
- Una clase llamada TestHeroe
//clase base
class Heroe{}
//clase hija hereda de clase padre
class SuperHeroe extends Heroe{}
//hace uso de los métodos de la interface Superpoderes
class Superman extends SuperHeroe implements Superpoderes{
@Override
public void vuelo(){
println "Superman vuela"
}
@Override
public void velocidad(){
println "Superman corre a gran velocidad"
}
@Override
public void fuerza(){
println "Superman posee gran fuerza"
}
}
//hace uso de la interface Habilidades
class Batman extends SuperHeroe implements Habilidades{
@Override
public void karate(){
println "Batman sabe karate"
}
}
interface Superpoderes{
public abstract void vuelo()
public abstract void velocidad()
public abstract void fuerza()
}
interface Habilidades{
public abstract void karate()
}
class TestHeroe{
static main(args) {
Superman superman=new Superman()
Batman batman=new Batman()
superman.vuelo()
superman.velocidad()
superman.fuerza()
batman.karate()
}
}
Salida:
Superman vuela
Superman corre a gran velocidad
Superman posee gran fuerza
Batman sabe karate
Ejecutamos: groovy TestHeroe.groovy
Código:http://www.pasteall.org/53722/groovy