目录
1.接口的作用
-
接口就是为了定义一些,扩展功能,这些功能并不是某个事物,天生所具备的,所以这些功能,就不适合直接定义到某个事物中,而是定义到接口中.在接口中定义这些功能时也不需要给出具体实现,直接抽象出来.如果某些事物,想要具备这些扩展功能,就可以实现该接口。
-
接口其实还可以定义一些规范,规则,然后然子类根据自身的差异性去实现这个规范。
2.interface关键字
定义接口使用 interface 这个关键字来定义. 格式: interface 接口名 {}
3.implements关键字
类要实现某个接口使用 implements 这个关键字来实现. 格式: class 类名 implements 接口名 {}
4.类和接口的关系: 咱们可以理解为 子类和父接口。
5.接口的特点
-
接口不能直接实例化。(但是咱们还是可以采用多态的方式来进行实例化。)
-
接口中没有构造方法。
-
接口中的方法,全是抽象方法.前面存在默认修饰符 public abstract,没有非抽象方法.在JDK1.8之后,接口中可以定义静态方法和default修饰的方法。(接口中default修饰的方法,实现类,可以继承下来,而且也可以重写。接口中的静态方法,只能使用接口名直接调用,实现类是无法继承的,也无法调用。)
-
接口中没有成员变量,全部是公共的静态常量 ,前面还是存在默认修饰符 public static final.(接口中的公共的静态常量,实现类,可以继承使用。)
-
接口属于引用数据类型
-
接口支持多继承,一个接口可以继承多个接口
-
当一个非抽象类实现接口,必须将接口中的所有方法全部实现(覆盖/重写).并且一个类可以同时实现多个接口.
补:接口与接口之间在进行向下转型的时候,并不需要继承关系.但需要注意,运行时可能会出现ClassCastException(类类型转换异常).
接口的语法: [修饰符列表] interface 接口名{ } (此处没有class关键字)
//测试类
public class interfaceTest1 {
public static void main(String[] args) {
//父接口 子类对象 (多态的方式实例化)
MyInterface m = new BB();
m.haha(); //哈哈
m.hehe(); //呵呵
m.bb(); //接口中的default修饰的方法
//使用接口名,直接调用接口中的公共的静态常量和静态方法(静态属于类,接口)
//输出接口中的静态常量
System.out.println(MyInterface.A); //2000
System.out.println(MyInterface.NUM); //100
//输出接口中的静态方法
MyInterface.aa(); //接口中的一个静态方法
//也可以使用 子类名 调用父接口的公共的静态常量
//输出子类中的静态常量,子类中没有就会去父接口中找
System.out.println(BB.A); //9000
System.out.println(BB.NUM); //100
//向下转型,调用接口中的default修饰的方法
BB bb = (BB) m;
bb.bb();
}
}
//接口类
interface MyInterface {
//前面还是存在默认修饰符 public static final,此处已省略
int NUM = 100;
//公共的静态常量,你可以写出来
public static final int A = 2000;
//前面存在默认修饰符 public abstract,此处已省略
void hehe();
//也可以不省略
public abstract void haha();
//JDK1.8 之后允许在接口中定义静态方法
public static void aa() {
System.out.println("接口中的一个静态方法");
}
//还可以允许在接口中定义 default 修饰的方法。default 修饰的方法直接用对象名调用
public default void bb() {
System.out.println("接口中的default方法");
}
}
//BB类
class BB implements MyInterface {
public static final int A = 9000;
//重写的接口内的方法
@Override
public void hehe() {
System.out.println("呵呵");
}
@Override
public void haha() {
System.out.println("哈哈");
}
}
6.接口成员特点
-
成员变量: 只能是常量,并且是静态的。 默认修饰符:public static final
-
成员方法: 只能是抽象方法。 默认修饰符:public abstract
-
构造方法: 接口没有构造方法。
7.抽象类和接口的区别
-
抽象类有构造方法. 接口中没有构造方法这一说
-
抽象类可以定义抽象方法,也可以定义非抽象方法. 接口全是抽象方法,没有非抽象方法.JDK1.8之后,接口中可以定义静态方法和default修饰的方法。
-
抽象类可以定义成员变量,也可以定义常量. 接口中只能定义公共的静态常量.
-
抽象类体现的思想还是 is a 的思想 燕子,麻雀 是鸟类的一种. 接口体现的是事物的扩展功能,事物本身所不具备的功能,可以定义到接口中.某些事物想要具备扩展功能就可以实现该接口。
-
类与类之间只能单继承. 接口与接口之间可以多继承.
了解抽象类点击这里
了解抽象类点击这里
了解抽象类点击这里
了解抽象类点击这里
了解抽象类点击这里
了解抽象类点击这里
了解抽象类点击这里
(小编也在努力学习更多哟!以后会多多分享哒!)
希望对友友们有帮助!!!