接口并不是类,编写接口的方式和类很相似,但是它们属于不同的概念。类描述对象的属性和方法。接口则包含类要实现的方法。
除非实现接口的类是抽象类,否则该类要定义接口中的所有方法。
接口无法被实例化,但是可以被实现。一个实现接口的类,必须实现接口内所描述的所有方法,否则就必须声明为抽象类。另外,在 Java 中,接口类型可用来声明一个变量,他们可以成为一个空指针,或是被绑定在一个以此接口实现的对象。
接口与类的区别:
接口不能用于实例化对象。
接口没有构造方法。
接口中所有的方法必须是抽象方法。
接口不能包含成员变量,除了 static 和 final 变量。
接口不是被类继承了,而是要被类实现。
接口支持多继承。
接口特性:
接口中每一个方法也是隐式抽象的,接口中的方法会被隐式的指定为 public abstract(只能是 public abstract,其他修饰符都会报错)。
接口中可以含有变量,但是接口中的变量会被隐式的指定为 public static final 变量(并且只能是 public,用 private 修饰会报编译错误)。
接口中的方法是不能在接口中实现的,只能由实现接口的类来实现接口中的方法。
抽象类和接口的区别
- 抽象类中的方法可以有方法体,就是能实现方法的具体功能,但是接口中的方法不行。
- 抽象类中的成员变量可以是各种类型的,而接口中的成员变量只能是 public static final 类型的。
- 接口中不能含有静态代码块以及静态方法(用 static 修饰的方法),而抽象类是可以有静态代码块和静态方法。
- 一个类只能继承一个抽象类,而一个类却可以实现多个接口。
- 实现接口三步走:
- 1.定义接口,相当于定义了抽象方法
- 2.接口不能直接拿来使用,需要有实现类来实现接口
- 格式:
• public class 实现类名称 implements 接口名称{
• // …
• }
- 接口的实现类必须覆盖重写(实现)接口中所有的抽象方法。
- 实现:去掉abstract关键字,加上方法体大括号。
- 3.创建实现类的对象,进行使用。
public interface myAbstract {
//这是一个抽象方法
public abstract void MyAbstract();
//这也是一个抽象方法
abstract void MyAbstract1();
//这也是一个抽象方法
public void MyAbstract2();
//这也是一个抽象方法
void MyAbstract3();
}
public class myAbstractimpl implements myAbstract{
@Override
public void MyAbstract() {
System.out.println("这是第一个借口");
}
@Override
public void MyAbstract1() {
System.out.println("这是第二个借口");
}
@Override
public void MyAbstract2() {
System.out.println("这是第三一个借口");
}
@Override
public void MyAbstract3() {
System.out.println("这是第四一个借口");
}
}
public class 实现Abstract {
public static void main(String[] args) {
myAbstractimpl Abs = new myAbstractimpl();
Abs.MyAbstract();
}
}
默认方法解决了接口升级问题,避免实现类对于接口新增的抽象方法全部重新覆盖
格式:
public default void Mystractdeflault(){
}
public interface myinterfacedefault {
//这是一个抽象方法
public abstract void Mystract();
//这是一个默认方法
public default void Mystractdefault() {
System.out.println("使用接口默认方法");
}
}