java8接口默认方法静态方法和重复注解
程序员文章站
2022-03-12 18:50:04
接口默认方法和静态方法 默认方法 如果类的父类的方法和接口中方法名字相同且参数一致,子类还没有重写方法,那么默认使用父类的方法,即类优先 如果类实现的接口中有名字相同参数类型一致的默认方法,那么在类中必须重写 静态方法 重复注解 以前我们是这样使用注解,当要在一个方法上标注两个相同的注解时会报错,j ......
接口默认方法和静态方法
默认方法
interface myinterface1 { default string method1() { return "myinterface1 default method"; } } class myclass{ public string method1() { return "myclass method"; } } /** * 父类和接口中都有相同的方法,默认使用父类的方法,即类优先 * @author 莫雨朵 * */ class mysubclass1 extends myclass implements myinterface1{ } @test public void test1() { mysubclass1 mysubclass1=new mysubclass1(); system.out.println(mysubclass1.method1());//myclass method }
如果类的父类的方法和接口中方法名字相同且参数一致,子类还没有重写方法,那么默认使用父类的方法,即类优先
interface myinterface1 { default string method1() { return "myinterface1 default method"; } } interface myinterface2 { default string method1() { return "myinterface2 default method"; } } /** * 如果类实现的接口中有名字相同参数类型一致的默认方法,那么在类中必须重写 * @author 莫雨朵 * */ class mysubclass2 implements myinterface1,myinterface2{ @override public string method1() { return myinterface1.super.method1(); } } @test public void test2() { mysubclass2 mysubclass2=new mysubclass2(); system.out.println(mysubclass2.method1());//myinterface1 default method }
如果类实现的接口中有名字相同参数类型一致的默认方法,那么在类中必须重写
静态方法
interface myinterface1 { static string method2() { return "interface static method"; } } @test public void test3() { system.out.println(myinterface1.method2());//interface static method }
重复注解
@retention(retentionpolicy.runtime) @target(elementtype.method) public @interface mannotation { string name() default ""; int age(); } public class annotataiontest { @test public void test() throws exception { class<annotataiontest> clazz=annotataiontest.class; method method = clazz.getmethod("good", null); mannotation annotation = method.getannotation(mannotation.class); system.out.println(annotation.name()+":"+annotation.age()); } @mannotation(name="tom",age=20) public void good() { } }
以前我们是这样使用注解,当要在一个方法上标注两个相同的注解时会报错,java8允许使用一个注解来存储注解,可以实现一个注解重复标注
@retention(retentionpolicy.runtime) @target(elementtype.method) @repeatable(mannotations.class)//使用@repeatable来标注存储注解的注解 public @interface mannotation { string name() default ""; int age(); } @retention(retentionpolicy.runtime) @target(elementtype.method) public @interface mannotations { mannotation[] value(); } public class annotataiontest { @test public void test() throws exception { class<annotataiontest> clazz=annotataiontest.class; method method = clazz.getmethod("good"); mannotation[] mannotations = method.getannotationsbytype(mannotation.class); for (mannotation annotation : mannotations) { system.out.println(annotation.name()+":"+annotation.age()); } } @mannotation(name="tom",age=20) @mannotation(name="jack",age=25) public void good() { } }
上一篇: php ckeditor上传图片文件名乱码解决方法
下一篇: 欢迎你回来,傻瓜