Vamos a crear la siguiente clase abstracta:
Carta
Que tiene dos propiedades:
String palo
int numero
Con sus getters y setters
Y un método abstracto
getValor()
De ahí vamos a derivar dos clases NO abstractas
Espanyola
Francesa
En Espanyola la función getValor nos devuelve el número que hay en numero EXCEPTO si número es 11 o 12 que devuelve 10.
En Francesa la función getValor nos devuelve siempre el número.
Después podemos crear una clase Baraja que tenga un arraylist de tipo Carta.
Añadimos los métodos addCarta que nos añada una carta al arraylist y un método totalValor que nos sume los valores de las cartas.
package com.trifulcas.cartas; public abstract class Carta { private String palo; private int numero; public abstract int getValor(); /** * @return the palo */ public String getPalo() { return palo; } /** * @param palo the palo to set */ public void setPalo(String palo) { this.palo = palo; } /** * @return the numero */ public int getNumero() { return numero; } /** * @param numero the numero to set */ public void setNumero(int numero) { this.numero = numero; } public String toString() { return palo+" | "+numero; } }
package com.trifulcas.cartas; public class Espanyola extends Carta { @Override public int getValor() { int res = getNumero(); if (res == 11 || res == 12) { res = 10; } return res; } }
package com.trifulcas.cartas; public class Francesa extends Carta { @Override public int getValor() { return getNumero(); } }
package com.trifulcas.cartas; import java.util.ArrayList; import java.util.List; public class Baraja { private List<Carta> cartas; public Baraja() { cartas = new ArrayList<Carta>(); } public void addCarta(Carta carta) { cartas.add(carta); } public int totalValor() { int res = 0; for (Carta carta : cartas) { res += carta.getValor(); } return res; } public String toString() { String res=""; for (Carta carta : cartas) { res += carta+" - "; } return res; } }
package com.trifulcas.cartas; public class TestCartas { public static void main(String[] args) { Carta sotabastos=new Espanyola(); sotabastos.setPalo("Bastos"); sotabastos.setNumero(10); System.out.println(sotabastos); Carta sietepicas=new Francesa(); sietepicas.setNumero(7); sietepicas.setPalo("Picas"); System.out.println(sietepicas); Carta reyespadas=new Espanyola(); reyespadas.setPalo("Espadas"); reyespadas.setNumero(12); System.out.println(reyespadas); Baraja miBaraja=new Baraja(); miBaraja.addCarta(sietepicas); miBaraja.addCarta(sotabastos); miBaraja.addCarta(reyespadas); System.out.println(miBaraja); System.out.println(miBaraja.totalValor()); } }