接口的默认方法和静态方法

匿名 (未验证) 提交于 2019-12-03 00:39:02
默认方法和抽象方法的区别是,抽象方法需要实现,而默认方法不需要;
默认方法会被实现类继承或重写。
所以默认方法被实现有三种可能:
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比较器

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!