接口的作用:
- 扩展功能
- 可以定义约束规范
- 程序的解耦
接口定义格式:
interface 接口名{
}
接口注意事项:
- 接口是一个特殊的类。
- 接口的成员变量默认的修饰符为public static final。那么就是说接口的成员变量都是常量。
- 接口中的方法都是抽象的方法,默认的修饰符为public abstract。
- 接口不能创建对象。
- 接口是没有构造方法的。
- 接口是给类去实现使用的,非抽象类实现一个接口的时候,必须要把接口中所有的方法全部实现。
实现接口的格式:
class 类名 implements 接口名{
}
类与接口之间的关系:
- 实现关系
类与接口要注意的事项:
- 非抽象类实现一个接口时,必须要把接口中所有的方法全部实现。
- 抽线类实现一个接口时,可以实现也可以不实现接口中的方法。
- 一个类可以实现多个接口。
接口与接口之间的关系:
- 继承关系
接口与接口之间要注意的事项:
- 一个接口是可以继承多个接口的。
案例:
武器接口:Weapon
public interface Weapon {
/*public static final*/
//把数字值代表的武器赋给常量,通过常量名就可以知道武器类别
int TYPE_COLD=1;
int TYPE_HEAT=2;
int TYPE_NUCLEAR=3;
/*接口的方法都是公共抽象的*/
/*public abstract*/
void kill();
//返回整数(武器的类别)
int getType();
//得到武器的名字
String getName();
}
接口实现类:
大宝剑类(Sword)实现武器(Weapon)接口
// Sword AK47 Lyb
public class Sword implements Weapon {
public void kill() {
System.out.println("耍剑");
}
public int getType() {
//冷兵器的数字常量 冷兵器代表1
return Weapon.TYPE_COLD;
}
public String getName() {
return "倚天剑";
}
}
接口实现类:
狼牙棒类(Lyb)实现武器(Weapon)接口:
public class Lyb implements Weapon{
public void kill() {
System.out.println("耍棒");
}
public int getType() {
return Weapon.TYPE_NUCLEAR;
}
public String getName() {
return "狼牙棒";
}
}
接口实现类:
AK47类(AK47)实现武器(Weapon)接口:
public class AK47 implements Weapon{
public void kill() {
System.out.println("耍枪");
}
public int getType() {
return Weapon.TYPE_HEAT;
}
public String getName() {
return "AK47";
}
}
变形金刚类:
public class Transformer {
//武器成员变量 w
//变形金刚使用一个武器接口,变形金刚要想使用武器接口,我们把武器接口定义成变成金刚的成员变量。
//引用类型的变量,没有进行赋值,默认为null值(空)。
private Weapon w;
/*
* 设置武器, 接收的武器参数,赋值给成员变量 w
*/
public void setWeapon(Weapon w) {
//给成员变量 w 赋值
//赋的是从参数接收的武器对象
this.w = w;
}
//进攻方法
public void attack() {
//判断是否接入武器
if(w == null) {
System.out.println("用牙咬");
return;
}
String type = "";
switch(w.getType()) {
case Weapon.TYPE_COLD:
type = "冷兵器";
break;
case Weapon.TYPE_HEAT:
type = "热兵器";
break;
case Weapon.TYPE_NUCLEAR:
type = "核武器";
break;
}
System.out.println(
"使用"+type+"武器"+w.getName()+"进攻");
w.kill();
}
}
测试类:Test1
public class Test1 {
public static void main(String[] args) {
/*
* 1. 新建 Sword 对象赋给 s
* 2. 新建 AK47 对象赋给 a
* 3. 新建 Lyb 对象赋给 l
* 4. 新建 Transformer 对象赋给 t
* 5. 让变形金刚 t 进攻 这时候没接武器用牙咬
* 6. 将武器 s 接入变形金刚的武器接口
* //给w接口设置接口实现类
* t.setWeapon(s);
* 7. 让变形金刚 t 进攻
* 9. 将武器 a 接入变形金刚的武器接口
* 10. 让变形金刚 t 进攻
* 11. 将武器 l 接入变形金刚的武器接口
* 12. 让变形金刚 t 进攻
*/
Sword s = new Sword();
AK47 a = new AK47();
Lyb l = new Lyb();
Transformer t = new Transformer();
t.attack();
t.setWeapon(s);
t.attack();
t.setWeapon(a);
t.attack();
t.setWeapon(l);
t.attack();
}
}