3、接口的应用
接口是一种特殊的抽象类。抽象类中的抽象方法仅提供函数原型,而没有具体的实现。子类必须提供父类中的抽象方法的实现方式。和抽象类一样,接口也可以定义抽象的方法。在就扣中只能包含抽象方法和常量,不能有变量、初始化块和构造函数。另外在Java中类的继承是单继承,而接口是可以用于多继承的。
1)、如何定义接口
当创建一个接口时,这个接口中的方法是抽象的。也就是说接口不提供具体的实现,他仅指定要做什么,而不说如何去做。一旦定义了接口,任何类都可以实现这个接口,而且一个类可以实现多个接口。接口只能定义常量和抽象方法。在Java中使用关键字interface创建一个接口。创建接口的如法如下:
[public] interface <接口名>{
[常量]
[<抽象方法>]
}
由public修饰的接口能被任何包中的接口或类访问,而具有默认访问的接口只能被所在的包内的接口或类访问。
接口中定义的所有变量必须是共有的、静态的和最终的。也就是说接口只能声明常量,而不能声明变量。接口中定义的所有方法都是公有的和抽象的,这些修饰符可以写也可以不写。下面的实例讲解了接口中的方法:
[java]
interface test02 {//定义了一个接口
void print(int a);
void print1(int b);
}
class test03 implements test02{
@Override
public void print(int a) {//提供了方法print()的具体实现
System.out.println("a=" + a);
}
@Override
public void print1(int b) {//提供了方法print1()的具体实现
System.out.println("b=" + b);
}
}
public class test {
public static void main(String[] args) {
test03 t3 = new test03();
t3.print(1);
t3.print1(2);
}
}
interface test02 {//定义了一个接口
void print(int a);
void print1(int b);
}
class test03 implements test02{
@Override
public void print(int a) {//提供了方法print()的具体实现
System.out.println("a=" + a);
}
@Override
public void print1(int b) {//提供了方法print1()的具体实现
System.out.println("b=" + b);
}
}
public class test {
public static void main(String[] args) {
test03 t3 = new test03();
t3.print(1);
t3.print1(2);
}
}
2)、接口常量
在Java中规定定义在接口中的变量必须具有public、static和final属性,所以在接口中只能声明常量,而不能声明变量。这样做能够保证实现该接口的所有类可以访问相同的量。下面的程序证明了接口中只能声明常量:
[java]
interface test02 {//定义了一个接口
int a = 1;
int b = 2;
int c = 3;
int d = 4;
int e = 5;
void print();
void print1();
}
class test03 implements test02{
@Override
public void print() {//提供了方法print()的具体实现
System.out.println("a+b=" + (a+b));
}
@Override
public void print1() {//提供了方法print1()的具体实现
System.out.println("c+d+f=" + (c+d+e));
}
}
public class test {
public static void main(String[] args) {
test03 t3 = new test03();
t3.print();
t3.print1();
}
}
interface test02 {//定义了一个接口
int a = 1;
int b = 2;
int c = 3;
int d = 4;
int e = 5;
void print();
void print1();
}
class test03 implements test02{
@Override
public void print() {//提供了方法print()的具体实现
System.out.println("a+b=" + (a+b));
}
@Override
public void print1() {//提供了方法print1()的具体实现
System.out.println("c+d+f=" + (c+d+e));
}
}
public class test {
public static void main(String[] args) {
test03 t3 = new test03();
t3.print();
t3.print1();
}
}
在一个程序中,如果一个常量被赋初值,那么这个值就 被更改。
接口内的方法都是公有的和抽象的。在方法声明中也可以不写public和abstract修饰符,但是该方法还是公有的和抽象的。下面的实例说明了就扣中的方法只能是public和abstract类型。
[java]
interface test02 {//定义了一个接口
void print();
public void print1();
abstract void print2();
public abstract void print3();
abstract public void print4();
}
class test03 implements test02{
@Override
public void print() {
System.out.println("这个方法没有修饰符");