默认方法和抽象方法的区别是,抽象方法需要实现,而默认方法不需要;
默认方法会被实现类继承或重写。
默认方法会被实现类继承或重写。
所以默认方法被实现有三种可能:
1)完全不管默认方法,因为实现类会继承接口的默认方法;
public interface Instrument { public void play(); default void test(){ System.out.println("this is default"); } }
public class Woodwind implements Instrument { @Override public void play() { System.out.println("this is play"); } public static void mian(String[] args) { Woodwind woodwind = new Woodwind(); woodwind.play(); woodwind.test(); } }
结果:
this is play
this is default
2)重新声明默认方法,使其抽象化;
public interface Instrument { public void play(); default void test(){ System.out.println("this is default"); } }
public class Woodwind implements Instrument { @Override public void play() { System.out.println("this is play"); } public void test(){} public static void mian(String[] args) { Woodwind woodwind = new Woodwind(); woodwind.play(); woodwind.test(); } }
结果:
this is play
3)重新定义默认方法,重写默认方法。
public interface Instrument { public void play(); default void test(){ System.out.println("this is default"); } }
public class Woodwind implements Instrument { @Override public void play() { System.out.println("this is play"); } public void test(){ System.out.println("this is new default"); } public static void mian(String[] args) { Woodwind woodwind = new Woodwind(); woodwind.play(); woodwind.test(); } }
结果:this is play
this is new default
接口中的静态方法,只能被接口自己调用。不能被继承,也不能被实现类调用。
public interface Instrument { public void play(); default void test(){ System.out.println("this is default"); } static void testStaitc() { System.out.println("this is static"); } } public class Woodwind implements Instrument { @Override public void play() { System.out.println("this is play"); } public void test(){ System.out.println("this is new default"); } public static void mian(String[] args) { Woodwind woodwind = new Woodwind(); woodwind.play(); woodwind.test(); woodwind.testStatic(); //报错,提示无此方法 Instrument.testStaitc(); } }
而静态方法可以作为辅助方法,帮助开发更容易组织代码。
比如Comparator比较器
文章来源: 接口的默认方法和静态方法