1.接口属于一种特殊的类,如果一个类定义时全部由抽象方法和全局变量组成,那么这种类就称为接口,而接口使用interface关键字定义的.
定义接口
interface A{ //定义接口
public static final String IN="韦蝠王";
public abstract void print();
}
interface B{
public abstract void get();
}
在接口中,同样存在抽象方法,但是接口对象无法直接进行实例化操作,所以接口使用如下:
1.每一个接口必须定义子类,子类使用implements关键字实现接口;
2.接口的子类(如果不是抽象类)必须覆写接口中所定义的全部抽象方法;
3.利用接口的子类,采用对象的向上转型方式,进行接口对象的实例化操作.
2.子类实现接口
class 子类 [extends 父类][implements 接口1,接口2,…]{}
通过格式发现,每一个子类同时可以实现多个接口,但是只能继承一个父类(或抽象类).
如下代码
运行结果
定义的子类X同时实现A和B两个接口,所以在X类中要同时覆写A和B两个接口中的抽象方法.而后利用向上转型的方式,通过子类为父类接口进行对象实例化操作.
3.子类继承抽象类同时实现接口
package class2;
interface B{//定义接口
public static final String IN="韦蝠王";
public abstract void print();
}
interface C{//定义接口
public abstract void get();
}
abstract class D{
//定义抽象类
public abstract void fun();
}
class Y extends D implements B,C{ //实现两个接口
@Override
public void print() {
System.out.println("Hello World");
}
public void get(){ //方法覆写
System.out.println(IN);
}
@Override
public void fun() {
System.out.println("芷若 你好");
}
}
public class Test12 {
public static void main(String[] args) {
B b=new Y(); //子类为接口实例化
C c=new Y(); //子类为接口实例化
D d=new Y(); //子类为抽象类实例化
b.print();
c.get();
d.fun();
}
}
运行结果
接口中的全部组成就是抽象方法和全局常量,那么在开发中这两种定义接口最终效果完全一致.
interface A{//定义接口
public static final String IN="韦蝠王";
public abstract void print();
}
interface A{//定义接口
public String IN="韦蝠王";
public void print();
}
接口中访问权限就只有一种:public,即定义接口方法的时候就算没有写上"public",最终也将是public.
4.在java中,每一个抽象类都可以实现多个接口,一个接口却不能继承抽象类,但是一个接口却可以同时继承多个接口,实现接口的多继承.
interface B{//定义接口
public void printB();
}
interface C{//定义接口
public void printC();
}
interface D extends B,C{ //一个接口继承多个接口
public void printD();
}
class Y implements D{ //实现两个接口
puclic void printB(){}
puclic void printC(){}
puclic void printD(){}
}
在开发中,内部类永远不会受到概念的限制,在一个类中可以定义内部类,在一个抽象类中也可以定义抽象内部类,在一个接口中可以定义内部抽象或内部接口,实际讲,用户自己定义内部抽象类或内部接口是比较少见的,而且在定义内部接口时如果使用了static表示一个外部接口.
5.使用static定义内部接口
X类实现的是一个Z接口的内部接口R,由于内部接口R使用了static关键字声明,所以此接口就为外部接口,子类可以直接实现.
运行实例
6.抽象类和接口的区别
抽象类和接口实际上都可使用,没有限制,但是抽象类缺点—一个子类只能够继承一个抽象类,存在单继承局限,遇到抽象类和接口使用,有些考虑接口,避免单继承局限.