接口是另一种定义数据类型的方式。它和类非常相似的。
相同之处:都有成员变量和成员方法
;也可以形成继承关系
不同之处:接口中的属性都是常量(final);接口中的方法是抽象方法(没有方法体)
引入接口的原因:Java只支持单重继承,每个类只能有一个超类。但实际应用中有时候需要多重继承--使用接口,一个类可以实现多个接口。
接口的定义
[public] interface 接口名 [extends 父接口1,父接口2,…]{
[public][static][final] 数据类型 属性名=常量值;
[public abstract] 返回值类型 方法名([形参表]);
}
接口的属性必须用public static final修饰,是系统默认的,可部分省略或全部省略,但一般都写出final。int MAX_SIZE = 50; 等价于public static final int MAX_SIZE = 50;
接口的方法默认为public abstract,一般不写修饰符,可省略--接口中的方法都是抽象方法。
接口的定义。
public interface Figure {
final double pi=3.14;
abstract void area();
}
接口定义后不能直接创建对象,必须由类实现接口后创建类的对象。每个类只能继承一个基类,但可以实现多个接口。
[public] class 类名 extends 基类 implements 接口1,…{
//类体
}
//implements是实现的;
类实现接口,就继承了接口中的所有成员变量和成员方法。由于接口中的方法都是抽象的,因此实现接口的类必须重写这些方法。
实现接口中的抽象方法时,除去掉关键字abstract外,方法头必须和接口定义中的方法头完全相同,并且public修饰符不能省略。
如果类实现了多个接口,必须重写这些接口中的所有方法。
接口不是类,不能使用new实例化接口,但可以声明接口变量。接口变量可以指向一个实现了该接口的类的对象,例如,Shape s=new Shape(); //错Shape s=new Circle(); //对
比较接口和抽象类:
(1)接口里只能包含抽象方法
(2)接口里不能定义静态方法
(3)接口里只能定义静态常量属性
(4)接口不包含构造方法
(5)接口里不能包含初始化块
(6)一个类可以实现多个接口
(1)抽象类可以包含普通方法。
(2)抽象类可以定义静态方法
(3)抽象类既包含普通属性,也可以包含静态常量属性
(4)抽象类里构造方法不用于创建对象,是让子类调用
(5)抽象类可以包含初始化块
(6)一个只能继承一个父类
1.定义一个接口,接口中有三个抽象方法:
long factorial(int m);//求参数的阶乘
long myPower(int m,int n);//求参数m的n次方
boolean findFactorSum(int m,int n);//判断参数中较小数是否是较大数的因子
定义类实现该接口。编写应用程序,调用接口中的三个方法,并将调用这些方法得到的结果输出。
interface Inter1//接口
{
public abstract long factorial(int m);
public abstract long myPower(int m,int n);
public abstract boolean findFactorSum(int m,int n);
}
class Text1 implements Inter1
{
public long factorial(int m)
{
int i=1;
for(m=1;m<10;m++)
{
i=i*m;
}
return i;
}
public long myPower(int m,int n)
{
return (long)Math.pow(m,n);
}
public boolean findFactorSum(int m,int n)
{
if(m>n && m%n==0)
{
return true;
}else{
return false;
}
}
public static void main(String[] args)
{
Inter1 i=new Text1();
System.out.println(i.factorial(22));
System.out.println(i.myPower(3,2));
System.out.println(i.findFactorSum(10,3));
}
}