Está en la página 1de 3

DPOO · PEC3 · 2019-01 · EIMT

Nombre: escribe aquí tu nombre y apellidos


Login: escribe aquí tu login UOC

Ejercicio 1 – JDK 8: Métodos default en interfaces (1.5 puntos)


¿Qué diferencia hay entre interfaz y clase abstracta a partir de JDK 8? O
dicho de otro modo, ¿para qué casos puede ser útil una u otra?

Con las clases abstractas, se pueden declarar atributos que no sean estáticos
y finales, y definir métodos concretos públicos, protegidos y privados.

Con las interfaces, todos los atributos son automáticamente públicos,


estáticos y finales, y todos los métodos que declaramos o definimos (como
métodos default) son públicos.

Por otro lado, en Java sólo podemos heredar de una sola clase, sea o no
abstracta, mientras que podemos implementar cualquier cantidad de
interfaces.

Más información sobre los usos (en inglés):


https://www.javaworld.com/article/2139921/learn-java/abstract-class-versus-
interface-in-the-jdk-8-era.html

Más información (en español): https://jarroba.com/interface-en-java8-metodo-


default-con-ejemplos/

1
DPOO · PEC3 · 2019-01 · EIMT

Ejercicio 4 – JDK 10: Tipo var (1 punto)


JDK 10 introdujo el tipo var. Sabiendo esto, se te pide:
a) Buscar información sobre el tipo var de Java (JDK 10) y explicar qué
es, cómo se usa, cuándo se puede usar, etc. Explícalo como máximo
en una página de Word, con fuente Arial y tamaño 11. Puedes incluir
ejemplos (sin pasar de la página de extensión).
El cambio más notable en el lenguaje Java en JDK 10 es la introducción de
var para extender la inferencia de tipo. Esta característica fue introducida
como respuesta a las quejas de los desarrolladores sobre la necesidad en
Java de indicar siempre el tipo de una variable, incluso cuando son locales y
pueden ser fácilmente deducibles/inferidos por el tipo de su inicialización.
Es decir, si uno hace:
lista = new ArrayList<String>();
es fácilmente deducible que el tipo de la variable lista es
ArrayList<String> y no otro tipo. Pero hasta JDK 10, la línea anterior era
incorrecta y se tenía que escribir así:
ArrayList<String> lista = new ArrayList<String>();
Para evitar la declaración explícita del tipo de una variable, JDK 10 introdujo
var. Así pues, la línea anterior se puede hacer así desde JDK 10:
var lista = new ArrayList<String>();
Gracias a var estamos diciéndole a Java que infiera el tipo a partir de su
inicialización (lado derecho de la asignación). Hay que dejar claro que var no
es sólo una palabra clave, sino un nuevo tipo. Evidentemente el uso de var
está restringido exclusivamente a los siguientes casos: (1) variables locales
con inicializadores, (2) índice de un bucle for, (3) tipo de un for-each.

public void method(){


var lst = ArrayList<String>();
lst.add(“orange”);
for(var i = 0; i<lst.size(); i++) {
System.out.println(lst.get(i));}
}
for(var item : lst){ System.out.println(item);}
}
Así pues, var no es aplicable a métodos, constructores, tipos de retorno de
un método (i.e. un método no puede devolver var), atributos de una clase,
tipos en un catch, etc. Por lo tanto, los ejemplos siguientes serían
incorrectos/erróneos:

2
DPOO · PEC3 · 2019-01 · EIMT

var v1;
// error: no puede inferir el tipo de la variable local
// v1 porque no tiene inicialización

var v2 = null;
// error: no puede inferir el tipo de la variable local
// v2 porque la inicialización es 'null'

var v3 = {1, 2, 3};


// error: no puede inferir el tipo de la variable local
// v3 (la inicialización de un array necesita un tipo
//explícito

También podría gustarte