Java 8 support static method or default method or both in the interface
package com.kartik.deflt.intrfce; public class Client { public static void main(String args[]){ Vehicle c=new Car(); c.getName(); System.out.println(c.turnAlarmOn()); System.out.println(c.turnAlarmOff()); Alarm a=new Car(); System.out.println(a.turnAlarmOn()); System.out.println(a.turnAlarmOff()); int sum=Alarm.sum(10, 20); System.out.println(sum); } }
package com.kartik.deflt.intrfce; public interface Alarm { default String turnAlarmOn() { return "Turning the alarm on."; } default String turnAlarmOff() { return "Turning the alarm off."; } static int sum(int a,int b){ return a+b; } }
package com.kartik.deflt.intrfce; public interface Vehicle { void getName(); default String turnAlarmOn() { return "Turning the alarm on for vehicle."; } default String turnAlarmOff() { return "Turning the alarm off for vehicle."; } }
package com.kartik.deflt.intrfce; public class Car implements Alarm, Vehicle { @Override public String turnAlarmOn() { return Vehicle.super.turnAlarmOn() + " " + Alarm.super.turnAlarmOn(); } @Override public String turnAlarmOff() { return Vehicle.super.turnAlarmOff() + " " + Alarm.super.turnAlarmOff(); } @Override public void getName() { System.out.println("Kartik"); } }
Kartik Turning the alarm on for vehicle. Turning the alarm on. Turning the alarm off for vehicle. Turning the alarm off. Turning the alarm on for vehicle. Turning the alarm on. Turning the alarm off for vehicle. Turning the alarm off. 30
When it comes to maintaining backward compatibility with existing code, however, static and default methods are a good trade-off.
Other Links: java static default method functional interface Inheritance Understand Part 3 Robot move GENERATING KEYSTORE FILES