概述/目的
Java仅仅支持单继承,即一个类只能有一个父类。为了克服单继承的缺点,Java使用了接口技术,一个类可以实现多个接口中的功能。
Java接口是一系列方法的声明,是一些方法特征的集合,可以简单理解成一个纯抽象类,但是不存在继承关系。对于使用接口的类而言,虽然我不直接继承你,但是我调用了你的功能。
声明
通过interface关键字声明,与类的声明相同。
内部变量必须定义成final并赋初值,后续不能修改,相当于宏常量,默认就是 public static final 类型(所以定义的时候可以不写final)。内部所有方法都默认是抽象方法,且只允许声明不允许定义。
interface Born{
final int AGE =1;
void playGame();
}
调用实现
使用关键字implements调用接口,使用多个接口时,接口名字之间用逗号隔开。
必须重新定义接口中的方法,实现接口方法时,必须加上public,保证访问权限不降低。
class Person implements Born{
public void playGame{
System.out.println("age:"+AGE+" "+"play game!");
}
}
接口回调
相当于上转型,把类转型成接口,把类的对象赋值给接口,只能访问接口中声明的方法。(见作业题中演示)
小结
接口定义了很多类都具有的功能,但不要求这些类之间存在继承关系。
只关心功能是否存在,但是不关注功能如何实现。
实现了多继承但是不存在多继承的层次问题,实现了不同类之间的常量共享,允许毫无关系的类的对象实现相同的功能。
第五周作业
要求
1.定义一个接口 Storable ,接口中一个方法 store()
2.定义三个类,UDisk,Cellphone,IPad,分别实现了该接口,内容是(System.out.println("该内容来自"+设备名称))
3.定义一个类 PrintShop,实现一个方法print方法,参数自己定义
4.主类中实现 实例化PrintShop,调用print方法,传入这三个类对应的对象,调用各自的store()方法
代码
package test0320_interface;
interface Storable
{
abstract public void store();
}
class UDisk implements Storable
{
@Override
public void store()
{
System.out.println("该内容来自:"+this.getClass().getName());
}
}
class Cellphone implements Storable
{
@Override
public void store()
{
System.out.println("该内容来自:"+this.getClass().getName());
}
}
class IPad implements Storable
{
@Override
public void store()
{
System.out.println("该内容来自:"+this.getClass().getName());
}
}
class PrintShop
{
public void print(Storable u)
{
u.store();
}
}
public class Test0320_Interface {
public static void main(String[] args) {
UDisk u = new UDisk();
Cellphone c = new Cellphone();
IPad i = new IPad();
PrintShop pr = new PrintShop();
pr.print(u);
pr.print(c);
pr.print(i);
}
}
运行效果
run:
该内容来自:test0320_interface.UDisk
该内容来自:test0320_interface.Cellphone
该内容来自:test0320_interface.IPad