java---java8中接口的新特性

  • java8的接口中还可以定义静态方法和默认方法
  • 接口中定义的静态方法,只能通过接口来调用
  • 通过实现类的对象,可以调用接口中的默认方法
  • 如果实现类重写了接口中的默认方法,调用时调用的是重写的方法。
  • 如果子类(或实现类)继承的父类和实现的接口中声明了同名同参数的默认方法,那么子类在没有重写此方法的情况下,默认调用的是父类中的同名同参数的方法。
  • 如果实现类实现了多个接口,而这多个接口中定义了同名同参数的默认方法,那么在实现类没有重写此方法的情况下,报错。---》接口冲突-----------解决办法:在实现类中重写此方法。

练习:

CompareA.java

package exer;

public interface CompareA {
	//静态方法
	public static void method1(){
		System.out.println("CompareA:北京");
	}
	//默认方法
	public default void method2(){
		System.out.println("CompareA:上海");
	}
	
	default void method3(){
		System.out.println("CompareA:上海");
	}
}

CompareB.java

package exer;

public interface CompareB {
	
	default void method3(){
		System.out.println("CompareB:上海");
	}
	
}

SuperClass.java

package exer;

public class SuperClass {
	public void method3(){
		System.out.println("SuperClass:北京");
	}
}

SubClassTest.java

package exer;

public class SubClassTest {
	public static void main(String[] args) {
		SubClass s=new SubClass();
		
		CompareA.method1();
		
		s.method2();
		
		s.method3();
		s.myMethod();
	}
}
class SubClass extends SuperClass implements CompareA,CompareB{
	public void method2(){
		System.out.println("SubClass:上海");
	}
	public void method3(){
		System.out.println("SubClass:深圳");
	}
	public void myMethod(){
		//调用自己定义的重写的方法
		method3();
		//调用的是父类中声明的
		super.method3();
		//调用接口中的默认方法
		CompareA.super.method3();
		CompareB.super.method3();
	}
}

posted @ 2022-02-10 11:15  ice--cream  阅读(148)  评论(0编辑  收藏  举报