接口的概念与定义
接口可以理解为抽象到不能再抽象的类,但是不要将接口和类混为一谈。可以认为类是一套体系,接口是另外一套体系,只不过类可以实现接口。
接口中的方法全部都是抽象方法,不能存在实现的方法。
接口使用interface关键字定义,接口的定义和类很相似。下面是经过简化的接口的一般形式:
access interface name {
return-type method-name1(parameter-list); //可以省略各种修饰符
return-type method-name2(parameter-list);
...
return-type method-nameN(parameter-list);
type varname1 = value; //可以省略各种修饰符
type varname2 = value;
..
type varnameN = value;
}
接口中的属性和方法
(1)接口中所有方法默认是公有的抽象方法。
隐式地标识为public、abstract,并且接口中的方法也只允许使用这两个修饰符。
注意,在抽象类中必需使用abstract关键字明确指定方法为抽象方法。
(2)在接口中所有变量默认为公有的静态常量。
被隐式地标识为public、static、final。这意味着实现接口的类不能修改它们。同时还必须初始化它们。
public interface A1 {
//接口中的属性必须public、static、final常量
public static final int I=10;
//接口中的属性public、static、final都可以省略
int J = 100;
//接口中的方法默认是public、abstract,所以public abstract可以省略
public abstract void print();
public void print2();
void print3();
}
注意:
接口能new对象吗?不可以
接口能作为一种类型定义引用变量吗? 可以 A1 a;
接口的实现
一旦定义了一个接口,一个或多个类就可以实现该接口。为了实现接口,在类定义中需要包含implements子句,然后创建接口定义的方法。
class classname implements interfacename {
//
}
注意:
(1)实现接口的类,必须实现接口的所有抽象方法,如果只实现了部分抽象方法,该类必须声明为抽象类。
(2)一个类可以实现多个接口,实现的多个接口用","隔开
(3)实现接口的类可以同时继承一个超类,必须是先继承后实现。
public interface A1 {
//接口中的属性必须是 public static final 常量
public static final int I=10;
//接口中的属性 public static final都可以省略
int J = 100;
//接口中的方法都是 public abstract 所以public abstract可以省略
public abstract void print();
public void print2();
void print3();
}
public interface A2 {
void show();
}
/**
* 类实现接口 使用implements
* 类可以实现多个接口,用 , 隔开
* 一个具体的类,实现接口,必须实现接口的所有抽象方法
* @author Administrator
*/
public class SubA implements A1,A2{
@Override
public void print() {
}
@Override
public void print2() {
}
@Override
public void print3() {
}
@Override
public void show() {
}
}
说明:
接口定义了一组抽象方法,实现该接口的类需要实现这些抽象方法,从而实现接口的类就具备了接口所规定的行为(功能)。
在Java中,接口可理解为对象间相互通信的协议,相当于模板。
接口的继承
接口可以通过关键字extends继承另一个接口,其语法和类继承相同。如果类实现的接口继承自另外一个接口,则该类必需实现在接口继承链中定义的所有方法。
接口的实例
实例1
public interface Shape {
double area();
void show(); //打印输出类的成员信息
void draw(); //我是XXX(矩形、圆形、三角形)
}
定义Rectangle、Circle、Triangle类,添加适当的属性,并实现Shape接口
定义测试类测试Rectangle、Circle、Triangle类。在测试类中定义一个Shape[]数组,在该数组中存储不同的形状对象。通过循环,分别调用各个对象的area()、show()、draw()方法。
实例2
public interface IntStack {
void push(int item);
int pop();
}
抽象类和接口的区别
补充:
抽象类有构造方法,接口没有构造方法
类只能单继承,接口可以多重继承接口
抽象类中可以没有抽象方法,但是有抽象方法的类必须是抽象类。