这里将自己学习java及其应用的一些笔记、积累分享一下,如果涉及到了文章、文字侵权,请联系我删除或调整。
一、接口
1.1 概述
-
接口的作用:结构设计工具,用来解耦合、隔离实现
-
可以理解为,接口是极端的抽象类
用
interface
代替
class
用
implements
代替
extends
1.2 接口中只能定义
-
公开的常量
-
公开的抽象方法
-
公开的内部类、内部接口
1.3 类可以实现多个接口
-
一个类只能有一个父类,但可以实现多个接口
class A implements X,Y,Z {
}
class A extends B implements X,Y,Z {
}
1.4接口之间继承,可以继承多个
interface A extends X,Y,Z {
}
1.5 练习:变形金刚
在此,我们先定义一个“武器”接口,同时将武器的一般通用功能或特点抽象为接口方法,例如kill(), getName(), getType()。
package 接口_变形金刚;
/*
* 定义接口,主要就是定义抽象方法
*/
public interface Weapon {
// public static final,在接口中可以省略不写
// 定义公开的常量
public static final int TYPE_COLD = 0;
public static final int TYPE_HOT = 1;
public static final int TYPE_NUCLEAR = 2;
/*接口定义的抽象方法*/
// 接口中定义的方法默认是public abstract,可以省略不写
void kill();
String getName();
int getType();
}
完成了接口的定义,接下来,我们来创造具体的武器,例如刀剑、枪炮、棍棒等。
package 接口_变形金刚;
/*
* 武器:剑(鲨齿剑)
*/
public class Sword implements Weapon{
@Override
public void kill() {
System.out.println("横贯八方!");
}
@Override
public String getName() {
return "鲨齿剑";
}
@Override
public int getType() {
return Weapon.TYPE_COLD;
}
}
package 接口_变形金刚;
public class AK47 implements Weapon {
@Override
public void kill() {
System.out.println("当!当当当!");
}
@Override
public String getName() {
return "银狐狙击炮!";
}
@Override
public int getType() {
return Weapon.TYPE_HOT;
}
}
package 接口_变形金刚;
public class Lyb implements Weapon {
@Override
public void kill() {
System.out.println("打狗!");
}
@Override
public String getName() {
return "打狗棒";
}
@Override
public int getType() {
return Weapon.TYPE_NUCLEAR;
}
}
至此,我们已经创建了3个具体武器,并且实现了相应的“武器”应该具备的方法。换句话说,我们已经完成了接口和接口实现类的编写,接下来就是怎么使用它们了。
我们接下来开始编写“变形金刚”,并且把设计的接口使用起来。
package 接口_变形金刚;
/*
* 变形金刚使用Weapon接口
*/
public class Transformer{
// 使用Weapon接口,则需要将Weapon定义为一个成员
// w默认值是null
private Weapon w;// 基于多态,三种武器都可以向上转型,保存在“父类”对象
// 进攻
public void attack() {
System.out.println("金刚进攻!");
// 判断是否有装配武器
if(w == null) {
System.out.println("用牙咬!");
return;
}
// 有武器,将武器类别代码转换成字符串的类别名
String s = "";
switch(w.getType()) {
case Weapon.TYPE_COLD: s = "冷兵器";break;
case Weapon.TYPE_HOT: s = "热兵器";break;
case Weapon.TYPE_NUCLEAR: s = "核武器";break;
}
// 显示进攻消息,例如:使用冷兵器鲨齿剑攻击!
System.out.println("使用"+s+w.getName()+"攻击!");
// 调用kill(),执行进攻动作
w.kill();
}
// 人为设置武器对象
public void setWeapon(Weapon w) {
this.w = w;
}
}
在此,我们将“武器”接口使用在了“变形金刚”类中,这样基于多态的原理,变形金刚就可以使用这个武器接口来“对接”多种武器实例,从而实现了解耦。接下来,我们测试一下。
package 接口_变形金刚;
import java.util.Random;
import java.util.Scanner;
public class Test1 {
public static void main(String[] args) {
// 创建变形金刚对象
Transformer t = new Transformer();
// 创建武器对象
Sword s = new Sword();
AK47 a = new AK47();
Lyb l = new Lyb();
System.out.println("回车继续!");
while(true) {
new Scanner(System.in).nextLine();
// 随机武器类别
int r = new Random().nextInt(4);
// 依据随机类别,装配武器
switch(r) {
case 0: t.setWeapon(s);break;// 装配武器鲨齿剑,冷兵器
case 1: t.setWeapon(a);break;// 装配武器银狐狙击炮,热兵器
case 2: t.setWeapon(l);break;// 装配武器打狗棒,核武器
case 3: t.setWeapon(null);break;// 默认无武器
}
// 变形金刚进攻
t.attack();
}
}
}