标签:接口
接口接口可以理解为一种更为抽象的抽象类,是抽象类的一种特殊形式,抽象类中可以定义不是抽象方法的一般方法(有方法体的方法),可以让子类直接继承使用,而接口中只能定义抽象方法,不能有一般方法,只能创建子类子类实例化使用。
接口也是一种特殊的类,但是接口的定义关键字不是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、 抽象类是这个事物应该具备的功能,接口是这个事物可以具备的额外功能
二者优先考虑接口的使用,需要为子类提供共性的内容选择抽象类
标签:接口
原文地址:http://blog.51cto.com/13502869/2051542