- 由于接口的特性,实现接口的类必须实现接口的所有抽象方法,否则只能设置该类也为抽象类。而对于只想有针对性地实现接口中的一部分方法而言,JDK1.8之后 接口提供了另一个解决方案: default 关键字。
-
deault 关键字可用于在接口中修饰抽象方法。被 default 关键字修饰的抽象方法可以带方法体。
-
实现该接口的类可以自主决定是否实现该 默认(default) 抽象方法。
接口示例代码://接口访问修饰符:public 默认 public interface INet { //接口中抽象方法可以不写 abstract 关键字 //接口的抽象方法访问修饰符如果什么都没加,系统默认会给它赋予 public 的访问权限。理由是:当子类实现该接口时,重写方法时系统也会默认将 public 添加上。如果将子类重写方法的 public 去掉,则系统会提示子类方法的访问权限必须大于或等于父类的方法。 void network(); //定义常量 int TEMP=20; //default: 默认方法 可以带方法体 default void connection() { System.out.println("我是接口中的默认方法"); } }
-
JDK 1.8 除了新增 default 关键字,同时也新增了 static 关键字,示例代码如下:
//接口访问修饰符:public 默认 public interface INet { //接口中抽象方法可以不写 abstract 关键字 //接口的抽象方法访问修饰符如果什么都没加,系统默认会给它赋予 public 的访问权限。理由是:当子类实现该接口时,重写方法时系统也会默认将 public 添加上。如果将子类重写方法的 public 去掉,则系统会提示子类方法的访问权限必须大于或等于父类的方法。 void network(); //定义常量 int TEMP=20; //default: 默认方法 可以带方法体 jdk 1.8 后新增 default void connection() { System.out.println("我是接口中的默认链接"); } //static: 静态方法 可以带方法体 jdk 1.8 后新增 static void stop() { System.out.println("我是接口中的静态方法"); } }
实现该接口的示例代码如下:
public class Computer implements INet{ @Override public void network() { System.out.println("电脑可以上网"); } @Override public void connection() { INet.super.connection(); INet.stop(); System.out.println(INet.TEMP); } }
Ps:
- 可以通过接口名.super (如 INet.super.connection( ))的形式来调用接口的成员方法;
- 可以通过 接口名(如INet.stop( ))调用接口中的静态方法或常量;
网友评论