关于interface,接口类定义的行为(方法)是不可以有body的也就是不能实现。
interface下的方法默认修饰符是public abstract
而成员变量的默认修饰符为public static final
其实本人是小白一枚,在看Iterator的时候,发现一个default修饰符,那就很好奇了,到底什么是default是什么,为什么要新加了一个default呢,就拿这个修饰符试了一下
1.default
class Test{ default void test(){} }
Extension methods can only be used within an interface,在我用普通类的时候竟然给我说这样的事情,原来default是为interface接口专门使用的啊,就转过去使用Interface试了一下
interface C{ default void say(){ System.out.println("hello"); }
果然就可以添加body,如何使用呢?一个类实现此接口会默认的添加这个方法并且不需要你去实现,因为已经实现过了,所以可以直接调用。
static class B implements C{ }// new B().say()
helloB内没有实现任何C中的方法,可以直接调用say()方法,结果为“hello”,当然如何你不想用他实现的话,是可以重写方法的。
2.static
本着好奇宝宝的心理,再一次对 Public abstract 的方法伸去了罪恶的双手,既然是abstract方法了就不能有body了,那如何我换一些修饰符呢,既然interface的对象不能实例化,既然成员变量就可以使用static,那么方法为什么就不可以呢,在方法加上static 以后可以使用,当然也就没有默认的abstract修饰了,而且实现类对象也不能调用,会说interface里的static修饰的方法只能被interface调用,感觉使用static修饰以后就缺少了interface的本身的意义了,所以暂时还不知道有没有什么特殊的用途,如果有的话请告诉小弟,涨一下见识。
----------------------------------------------------------------------------------------------------------------------------------------------------------
初次发帖,有什么不地道的地方,请见谅。========>_<===========