6.2 实现接口
6.2.1 实现接口
Java语言中,接口由类来实现以便使用接口中的方法
//1.类实现接口
class A implement 接口1,接口2,接口3{
···}
//2.类的子类实现接口
class B extends class A implement 接口1,接口2,接口3{
···}
6.2.2重写接口中的方法
(1)一个非抽象类实现了某个接口,这个类必须重写这个接口中的所有方法
(2)非抽象类在重写接口方法的时候需要去掉abstract修饰符,给出方法体,方法访问权限一定要明显的用public修饰
(3)用户也可以自定义接口,一个Java源文件可以由类和接口组成
//例子:
public interface Example6_1_Computable {
int MAX = 50;
int f(int x);
}
public class Example6_1_China implements Example6_1_Computable {
int numner;
@Override
public int f(int x) {
// TODO Auto-generated method stub
int sum = 0;
for (int i = 1; i < x; i++) { //重写接口的方法
sum = sum + i;
}
return sum;
}
}
public class Example6_1_Japan implements Example6_1_Computable {
int number;
@Override
public int f(int x) {
return MAX + x; //直接使用接口的常量
}
}
public class Example6_1 {
public static void main(String[] args) {
// TODO Auto-generated method stub
Example6_1_China china;
Example6_1_Japan japan;
china =new Example6_1_China();
japan=new Example6_1_Japan();
china.numner=20+Example6_1_Computable.MAX;
japan.number=10+Example6_1_Computable.MAX;
System.out.println("China的学号:"+china.numner+",求和结果:"+china.f(5));
System.out.println("Japan的学号:"+japan.number+",求和结果:"+japan.f(1));
}
}
//输出结果:
//China的学号:70,求和结果:10
//Japan的学号:60,求和结果:51
(4)抽象类实现接口,可以不重写接口的所有方法(即可拥有也可以直接继承)
//例子:
public interface Example6_1_Computable {
final int MAX = 50;
int f(int x);
void speak(String string);
float f(float x,float y);
}
public abstract class Example6_1_All implements Example6_1_Computable{
public int f(int x) {
int sum=0;
for (int i = 1; i < x; i++) {
sum=sum+i;
}
return sum;
}
}
接口的细节:
(1)程序可以用接口名访问接口中的常量,但是一个类实现了接口,该类可以直接在类体中使用该接口的常量
(2)定义接口时,如果关键字interface前面加了public关键字,就称这样的接口是public接口,可以被任何一个类实现。
(3)如果关键字interface前面不加public关键字,就称这样的接口是友好接口,可以被与该接口在同一个包中的类实现。
(4)若父类实现了某接口,那么子类自然也实现该接口不必显式的使用关键字implement声明这个接口
(5)接口也可以被继承,关键字extends,子接口继承父接口全部方法和变量
注意:Java提供的接口都在相应的包中,通过import语句不仅可以引入包中的类,也可以引入包中接口
import Java.io.*