jdk_8接口的内部内容
-
如何创建已定义好的接口类型的对象呢?
步骤:
-
实现的概述
-
抽象方法的使用
-
默认方法的使用
-
静态方法的使用
- 接口的常量使用
讲解:
实现的概述
类与接口的关系为实现关系,即类实现接口,该类可以称为接口的实现类,也可以称为接口的子类。实现的动作类似继承,格式相仿,只是关键字不同,实现使用 implements
关键字。
非抽象子类实现接口:
-
必须重写接口中所有抽象方法。
-
继承了接口的默认方法,即可以直接调用,也可以重写。
实现格式:
class 类名 implements 接口名 {
// 重写接口中抽象方法【必须】
// 重写接口中默认方法【可选】
}
抽象方法的使用
必须全部实现,代码如下:
定义接口:
public interface LiveAble {
// 定义抽象方法
public abstract void eat();
public abstract void sleep();
}
定义实现类:
public class Animal implements LiveAble {
定义测试类:
public class InterfaceDemo {
public static void main(String[] args) {
// 创建子类对象
Animal a = new Animal();
// 调用实现后的方法
a.eat();
a.sleep();
}
}
输出结果:
吃东西
晚上睡
默认方法的使用
可以继承,可以重写,二选一,但是只能通过实现类的对象来调用。
-
继承默认方法,代码如下:
定义接口:
public interface LiveAble {
public default void fly(){
System.out.println("天上飞");
}
}
定义实现类:
public class Animal implements LiveAble {
// 继承,什么都不用写,直接调用
}
定义测试类:
public class InterfaceDemo {
public static void main(String[] args) {
// 创建子类对象
Animal a = new Animal();
// 调用默认方法
a.fly();
}
}
输出结果:
天上飞
-
重写默认方法,代码如下:
定义接口:
public interface LiveAble {
public default void fly(){
System.out.println("天上飞");
}
}
定义实现类:
public class Animal implements LiveAble {
定义测试类:
public class InterfaceDemo {
public static void main(String[] args) {
// 创建子类对象
Animal a = new Animal();
// 调用重写方法
a.fly();
}
}
输出结果:
自由自在的飞
静态方法的使用
静态与.class 文件相关,只能使用接口名调用,不可以通过实现类的类名或者实现类的对象调用,代码如下:
定义接口:
public interface LiveAble {
public static void run(){
System.out.println("跑起来~~~");
}
}
定义实现类:
public class Animal implements LiveAble {
// 无法重写静态方法
}
定义测试类:
public class InterfaceDemo {
public static void main(String[] args) {
// Animal.run(); // 【错误】无法继承方法,也无法调用
LiveAble.run(); //
}
}
输出结果:
跑起来~~~
常量的使用
public interface LiveAble {
//常量 ,必须赋值,一旦赋值,就不能修改
public static final String MY_NAME = "wzw";
//同以上效果一致
int AGE = 18;
}
定义实现类:
public class Animal implements LiveAble {
// 无法重写静态常量
}
定义测试类:
public class InterfaceDemo {
public static void main(String[] args) {
// Animal.MY_NAME; // 【错误】无法继承方法,也无法调用
System.out.println(LiveAble.MY_NAME); // 接口名直接调用
System.out.println(LiveAble.AGE); // 接口名直接调用
}
}
输出结果:
wzw
18
* 博客文章部分截图及内容来自于学习的书本及相应培训课程,仅做学习讨论之用,不做商业用途。
* 如有侵权,马上联系我,我立马删除对应链接。
* 备注:王子威
* 我的网易邮箱:wzw_1314_520@163.com