Java 8 Interface Changes default method and static method

Why default method?

For example we have an interface which has multiple methods, and multiple classes are implementing this interface. One of the method implementation can be common across the class. We can make that method as a default method, so that the implementation is common for all classes.

Second scenario where we have already existing application, for a new requirements we have to add a method to the existing interface. If we add new method then we need to implement it throughout the implementation classes. By using the Java 8 default method we can add a default implementation of that method which resolves the problem.

Java default methods

Java default methods are defined inside the interface and tagged with default keyword. Default methods are non-abstract methods. We can override default methods to provide more specific implementation.

Example

package com.w3schools;

interface Display{  
    //Default method   
    default void display(){  
        System.out.println("Hello Jai");  
    }  
    //Abstract method  
    void displayMore(String msg);  
}  
public class DefaultMethods implements Display{  
	//implementing abstract method
    public void displayMore(String msg){           
        System.out.println(msg);  
    }  
    public static void main(String[] args) {  
        DefaultMethods dm = new DefaultMethods(); 
        //calling default method 
        dm.display();    
        //calling abstract method
        dm.displayMore("Hello w3schools");    
    }  
}  

Output

Hello Jai
Hello w3schools

Static methods in interfaces are similar to the default methods. The only difference is that we cannot override these methods in the classes that implements these interfaces.

Example

package com.w3schools;

interface Display{  
    //Default method   
    default void display(){  
        System.out.println("Hello Jai");  
    }  
    //Abstract method  
    void displayMore(String msg);  
    //Static method
    static void show(String msg){    
        System.out.println(msg);    
    }  
}  
public class StaticMethodTest implements Display{  
	//implementing abstract method
    public void displayMore(String msg){           
        System.out.println(msg);  
    }  
    public static void main(String[] args) {  
    	StaticMethodTest smt = new StaticMethodTest(); 
        //calling default method 
        smt.display();    
        //calling abstract method
        smt.displayMore("Hello w3schools");  
        //calling static method
        Display.show("Hello Java");
    }  
}  

Output

Hello Jai
Hello w3schools
Hello Java