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

默认方法和抽象方法的区别是,抽象方法需要实现,而默认方法不需要;
默认方法会被实现类继承或重写。
所以默认方法被实现有三种可能:
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比较器

猜你喜欢

转载自blog.csdn.net/shy2794109/article/details/80854901