Exercicio que Contem Herança,interface e Classe Abstract

Bom dia a todos ,
Estou com um probleminha , a alguns ja venho batendo a cabeça nesse exercicio e n consigo achar uma solução.
Tenho uma interface
Tenho uma classe abstract que implementar essa interface
e Duas Classes que extendem a classe abstract
Nessas duas classes , vou ter mensagens que cada classe tera um codigo para identificar de que tipo é a mensagem .
e Terei uma outra Classe que processara essa informações …

Estou lendo um pouco mais sobre classe abstract , mas qualquer explicação sobre o assunto sera mto bem vinda =D

Segue o codigo:

public interface Imessage 
{
	public void send();
	public int code();
	public String getMsg();
	public void getUserInput();

}

public abstract class AbstractMessage implements Imessage
{
	private int codeMsg;
	private String MsgSms;
	private String MsgMms;
	
	public void setMsgMms(String msgMms) {
		MsgMms = msgMms;
	}
	public String getMsgMms() {
		return MsgMms;
	}
	public int getCodeMsg() {
		return codeMsg;
	}
	public void setCodeMsg(int codeMsg) {
		this.codeMsg = codeMsg;
	}
	
	public String getMsgSms() {
		return MsgSms;
	}
	
	public void setMsgSms(String msgSms) {
		MsgSms = msgSms;
	}
	
	public String getUserInput(String userInput)
	{
		String inputLine = null;
		System.out.print(userInput + " ");
		try
		{
			BufferedReader is = new BufferedReader(new InputStreamReader(System.in));
			inputLine = is.readLine();
			if (inputLine.length() == 0 )
				return null;
		}
		catch(IOException e)
		{
				System.out.println("IOException "+ e);
		}
		return inputLine;
	}

		public static void  process(Imessage msg)
		{
				msg.send();
			if (msg.code()== 0 )
				{
					System.out.println("Text menssage");
					System.out.println(msg.getMsg());
				}
				else
				{
					System.out.println("Multimedia menssage");
					System.out.println(msg.getMsg());
				}
		}
	
		public int code() 
		{	
			return getCodeMsg();
		}
	
	

}

public class SmsMessage extends AbstractMessage
{
		
	private String msgLove = " I love you ";
	private String msgConnectionLost = "You have missed calls";
	private String msgAlert = "Attention";
	private String msgOfBusy = "I'm busy";

	public String getMsgLove() {
		return msgLove;
	}
	
	public String getMsgConnectionLost() {
		return msgConnectionLost;
	}
	
	public String getMsgAlert() {
		return msgAlert;
	}
	
	public String getMsgOfBusy() {
		return msgOfBusy;
	}
	

	
	@Override
	public void send()
	{
		System.out.println("[1] Menssage of love");
		System.out.println("[2] Menssage of missed calls");
		System.out.println("[3] Menssage of Attention");
		System.out.println("[4] Menssage of busy");
		System.out.println("[5] Exit");
		String optionAux = getUserInput("Select an option :");
		try
		{
			int option = Integer.valueOf(optionAux);
			switch (option)
			{
				case 1:setMsgSms(msgLove);break;
				case 2:setMsgSms(msgConnectionLost);break;
				case 3:setMsgSms(msgAlert);break;
				case 4:setMsgSms(msgOfBusy);break;
				case 5:System.out.println("Exiting...");System.exit(0);
				default:
					System.out.println("=================================");
					System.out.println("|        Option Invalid         |");
					System.out.println("=================================");
					send();
			}	
		}
		catch (NumberFormatException e) 
		{
			System.out.println("=================================");
			System.out.println("|        Option Invalid         |");
			System.out.println("=================================");
			send();
		}
		setCodeMsg(0);
	}

	@Override
	public int code() {
		
		return getCodeMsg();
	}

	@Override
	public void getUserInput() {
		// TODO Auto-generated method stub
		
	}

	@Override
	public String getMsg() {
		// TODO Auto-generated method stub
		return null;
	}


}


public class MmsMessage extends AbstractMessage
{
		
	private String  imgCat = "Cat.jpg";
	private String  soundAlert = "Alert Alert ";
	private String  soundCar = " Vrummm Vrummmmmmm";
	private String  soundExplosion = "Bbbuuuuummmmmm";

	public void send()
	{
		
		System.out.println("[1] Imagem of cat");
		System.out.println("[2] Sound Alert");
		System.out.println("[3] Sound Car");
		System.out.println("[4] Sound of Explosion");
		System.out.println("[5] Exit");
		String optionAux = getUserInput("Select an option :");
		try
		{
			int option = Integer.valueOf(optionAux);
			switch (option)
			{
				case 1:setMsgMms(imgCat);break;
				case 2:setMsgMms(soundAlert);break;
				case 3:setMsgMms(soundCar);break;
				case 4:setMsgMms(soundExplosion);break;
				case 5:System.out.println("Exiting...");System.exit(0);
				default:
					System.out.println("=================================");
					System.out.println("|        Option Invalid         |");
					System.out.println("=================================");
					send();
			}	
		}
		catch (NumberFormatException e) 
		{
			System.out.println("=================================");
			System.out.println("|        Option Invalid         |");
			System.out.println("=================================");
			send();
		}
		setCodeMsg(1);
		
	}

	public int code() {
		
		return getCodeMsg();
	}

	@Override
	public void getUserInput() 
	{
		
	}
	
	@Override
	public String getMsg() {
		
		return null;
	}
}

public  class MessageProcessor 
{		
	
	public static void main(String[] args)
	{
		
	}
}