Skip to main content

When to User Interface and When Abstract Class

This discussion is very common , when to use interface and when to use Abstract Class. Before deciding we should know properties of Abstract Class and Interface in details

::Abstract Class::

  • It contains both abstract methods and non abstract methods
  • Classes Extend Abstract Class
  • Abstract Classes cannot be instantiated.
  • Abstract can't be declared with Final Synchronised Native.
  • It can have static and instance initialise block.
  • Abstract Class has constructor.
  • Abstract Class may not contain any method(any abstract method)

  • Interface contains all abstract methods.
  • Classes implements Interface.
  • all methods compulsory implemented by particular class which implement interface.
  • Interface variables are implicitly public static and final.
  • Interface variables are constants that cannot be overridden. They are inherited by any class that implements an interface.
  • Interface may not contain any method(Marker Interface).
  • Interface does not contain Constructor.
  • Interface cant have static or instance initialise block.

Abstract class without any abstract method is possible. It is very confusing why would we need an Abstract class without abstract method. Just think about the following example,

Lets define an interface called Car, with some attributes like

public interface Car{
  public static int numberOfWheels = 4;
  public int getNumberofDoors();  public int getnumberOfEngine();
  public int getnumberOfSeats();

We can define SportsCar as a abstract class with some default  properties like,

public abstract class SportsCar implements Car{
   public int getnumberOfEngine(){ return 2;}

   public int getnumberOfSeats(){ return 1;}

Here SportsCar is a abstract class without any method, it is just implementing some default properties like number of engine , number of seats etc.

And rest of the properties are left to be defined by classes that will extend class SportsCar.

One of the point is that,If you need to change your design, make it an interface. However, you may have abstract classes that provide some default behavior. Abstract classes are excellent candidates inside of application frameworks.

Interfaces are used for defining constants


Popular posts from this blog

Masking Credit Card number in Java

Sometimes we need to mask crucial information like Credit Card Numbers, CVV numbers etc before storing  or logging the information. This example mask Credit Card Number (Except last 4 Digit) from a Text which contains information along with Credit Card Number.

The following example demonstrates how we can easily mask the credit card with Matcher and Pattern Classes. This Sample Code uses Matcher and Pattern.
Pattern Used in this sample is not optimized for Credit Card Numbers, this pattern will get any numerical numbers in the String Content.  Based on the Credit Card Type a more efficient and Strict RegEx can be used to mask the Credit Card.
/**Mask the Credit card number but last four digit value **/   Pattern PATTERN = Pattern.compile("[0-9]+"); String message = content; Matcher matcher = PATTERN.matcher(message); String maskingChar = "*"; StringBuilder finalMask = new StringBuilder(maskingChar); while …

Converting Java Map to String

Java Collections framework, String manipulation etc is something that we often encounter in Development process.
For processing collections (like checking null/empty, Intersection, Disjunction) We do have some of the very use full libraries.

Some of the Collection related libraries are Apche Commons Collections and Google  Collections(Guava).

Problem Use Case

This article explains how to convert a Java Map to String(and vice versa) using different libraries and technique.

One way is to use StringBuilder(Or String) and loop though the Map and build the String by applying some sort of separator ( for key:value and entry). Here we have to take care of the null value etc.

Without Any Library
If we want to convert the map to a String with key value separator and also individual entry seperator in the resulting String, we have to write code for that. For a simple Map, we have to iterate though the map, take care of the null values etc. Following is a sample to get String built out from Map C…

Invoking EJB deployed on a remote machine

Invoking EJB deployed on a remote machineIn case we are calling remote ejb( ejb deployed on remote machines),The JNDI lookup might lookup like,Properties env = new Properties();env.put(Context.INITIAL_CONTEXT_FACTORY, "org.jnp.interfaces.NamingContextFactory");env.put(Context.PROVIDER_URL, "XX.XXX.XX.XX:1099");env.put("java.naming.factory.url.pkgs", "org.jboss.naming:org.jnp.interfaces"); Context ctx = new InitialContext(env);If we are calling local ejb then we can simply create InitialContext without any parameters.Like,Context ctx = new InitialContext();