接口interface
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了接口interface相关的知识,希望对你有一定的参考价值。
接口接口可以理解为一种更为抽象的抽象类,是抽象类的一种特殊形式,抽象类中可以定义不是抽象方法的一般方法(有方法体的方法),可以让子类直接继承使用,而接口中只能定义抽象方法,不能有一般方法,只能创建子类子类实例化使用。
接口的定义
接口也是一种特殊的类,但是接口的定义关键字不是class,需要用interface(接口)关键字来定义
定义格式:
public interface 接口名{
抽象方法1;
抽象方法2;
抽象方法3;
……
}
接口中的抽象方法也是有固定的定义格式的:
public abstract 返回值类型 方法名(参数列表);
接口方法的修饰符必须为public,如果不写默认也是public,不是default
接口的成员变量的定义也是有要求的:
public static final(最终的) 数据类型 变量名 = 值;
接口中定义的成员变量全部都是常量,定义后就不可改变。
类实现接口
类与类之间是继承的关系,子类继承了父类,类与接口之间就不是继承关系了,而是实现关系,类实现了接口,这个类可以看成是子类,准确来说应该是实现类。
定义了接口,就需要定义另一个类去实现这个接口,重写接口的方法,需要用到一个关键字implements(实现)去实现接口,用一段代码来演示接口的实现:
l 接口类
package cn.itcast.intreface接口; /* * 定义接口 * 定义成员变量和抽象方法 */ public interface Interface { //定义成员变量,其实在接口中定义的变量都是常量 //int a = 1; //写全之后是这种格式 public static final int a = 1; //定义抽象方法,用于实现类的方法重写 public abstract void fuction(); }
l 实现接口类
package cn.itcast.intreface接口; /* * 实现类,实现接口 * 重写接口的方法 */ public class ImplementsInterface implements Interface{ //重写接口方法 public void fuction(){ System.out.println("类重写了接口中的方法"); } }
l 测试类
package cn.itcast.intreface接口; /* * 测试类;测试接口的实现 */ public class Test { public static void main(String[] args) { //创建实现接口类ImplementsInterface的对象 ImplementsInterface imp = new ImplementsInterface(); imp.fuction(); } }
接口中成员的特点
1、成员变量的特点:其实在接口中该变量已经不是变量了,而是常量,它的值是不可以被改变的。
成员变量的定义格式(固定):public static final 数据类型 变量名 = 值;
public 权限最大
static 被static修饰的成员都可以通过类名点直接调用该成员
final 最终的,被它修饰的成员不可被修改
注意:这三个修饰符可写可不写,它都是默认存在的。
2、成员方法的特点:
抽象方法的格式(固定):public abstract 返回值类型 方法名();
接口中方法的public abstract 修饰符也是可写可不写,都是默认存在的。
注意:接口中的抽象方法,在实现类中必须全部进行重写。
接口的多实现
在java中是不允许多继承的,但是可以允许接口的多实现,定义两个接口,实现类继承两个接口,这是允许的,但是必须要将两个接口中的抽象方法全部进行重写。如下:
//接口A
public interface A{
public abstract void a();
}
//接口B
public interface B{
public abstract void b();
}
//实现类C,进行多实现,重写接口中的所有方法
public class C implements A,B{
public void a(){}
public void b(){}
}
类继承类实现多接口
一个类可以继承一个父类同时实现多个接口,如下:
//接口A
public interface A{
public abstract void a();
}
//接口B
public interface B{
public abstract void b();
}
//父类D
public class D{
public void d(){}
}
//实现类C,进行多实现,重写接口中的所有方法
public class C extends D implements A,B{
public void a(){}
public void b(){}
public void d(){}
}
接口中的多继承
java中类之间是不能有多继承的,但是接口之间可以进行多继承,如下:
//接口A
public interface A{
public abstract void a();
}
//接口B
public interface B{
public abstract void b();
}
/*
接口C,继承接口A,B
重写接口中所有的方法
*/
public interface C entends A,B{
public void a(){}
public void b(){}
}
接口的好处
1、 增强了扩展性
2、 借口就是暴露出来的规则
3、 接口降低了耦合性
接口和抽象类的区别
相同点:
1、 都属于继承的顶端被其他类继承或者实现
2、 都需要重写其父类和接口的方法
3、 接口和抽象类都不能实例化对象,需要子类重写方法创建子类对象进行实现
区别:
1、 抽象类可以重写一部分方法,其他方法可以直接继承使用,接口必须重写所有的方法
2、 一个类只能继承一个直接父类,但是接口可以实现多个,解决了单继承的问题
3、 抽象类是这个事物应该具备的功能,接口是这个事物可以具备的额外功能
二者优先考虑接口的使用,需要为子类提供共性的内容选择抽象类
以上是关于接口interface的主要内容,如果未能解决你的问题,请参考以下文章