JDK1.8之后,接口的语法有改动

JDK1.8之后,接口的语法有改动

增加了两类成员

(1)静态方法:public static,static不可以省略的
通过“接口名.方法”来进行调用

接口的静态方法不会继承到实现类中,不能用接口的实现类对象调用,只能用接口名调用。

为什么这么设计呢?
因为原来的API中,往往会设计为这样:
(1)集合类的接口:Collection
集合的工具类:Collections
(2)文件
文件路径的接口:Path
工具类:Paths

**觉得没有必要为了这个接口在增加一个工具类,干脆把这些方法直接写到接口中,
减少.class 的文件的数量,减少API的类型的数量**

(2)默认方法:public default,default不可以省略的
通过实现类的对象进行调用。
说明:实现类可以对接口的默认方法进行重写。重写时,不需要加default。不然就错了

  • 什么情况下用默认方法呢?
    当这个接口的某个抽象方法,在很多实现类中的实现代码是一样的,那么可以吧这个实现挪到接口中,用默认方法进行实现
    如果对该抽象方法不一样的实现的实现类,那么可以对该默认方法进行重写。
    具体的演示代码见://默认抽象方法的使用
public class TestInterface {
	public static void main(String[] args) {
		MyInter.print();//直接接口名调用
		
		MyImpl my = new MyImpl();
		my.test();
		my.method();
		
		SubA sa = new SubA();
		sa.a();
		
		SubD ad = new SubD();
		ad.a();
	}
}


interface MyInter{
	String INFO = "禾木";//全局静态常量
	void test();//公共的抽象的方法
	
	public static void print() {
		System.out.println("接口的静态方法");
	}
	
	public default void method() {
		System.out.println("接口的默认方法");
	}
}


class MyImpl implements MyInter{

	@Override
	public void test() {
		// TODO Auto-generated method stub
		System.out.println("实现接口的抽象方法");
	}
	
}


//默认抽象方法的使用
/*
 *这个 a(); 在每一个的接口的实现类中都是一样的方法体,只有SnbD中不一样
 *那么可以考虑的是把这个方法写成默认的方法,在实现类中,如果方法体相同的就不用
 *在写一遍了,在实现类中如果方法体不同,重写一下就好了。
interface A{
	void a();//抽象方法
}

class SubA implements A{
	@Override
	public void a() {
		// TODO Auto-generated method stub
		System.out.println("aa");
	}	
}
class SubB implements A{
	@Override
	public void a() {
		// TODO Auto-generated method stub
		System.out.println("aa");
	}	
}
class SubC implements A{
	@Override
	public void a() {
		// TODO Auto-generated method stub
		System.out.println("aa");
	}	
}
class SubD implements A{
	@Override
	public void a() {
		// TODO Auto-generated method stub
		System.out.println("dd");
	}	
}
*/


interface A{
	public default void a() {
		System.out.println("aa");
	}
}

class SubA implements A{
	
}
class SubB implements A{
	
}
class SubC implements A{
	
}
class SubD implements A{

	@Override
	public void a() {
		// TODO Auto-generated method stub
		System.out.println("dd");
	}

}

展开阅读全文
©️2020 CSDN 皮肤主题: 技术工厂 设计师: CSDN官方博客 返回首页
实付0元
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值