天津专门做网站的公司/南通做网站推广的公司
这里将自己学习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{@Overridepublic void kill() {System.out.println("横贯八方!");}@Overridepublic String getName() {return "鲨齿剑";}@Overridepublic int getType() {return Weapon.TYPE_COLD;}
}
package 接口_变形金刚;public class AK47 implements Weapon {@Overridepublic void kill() {System.out.println("当!当当当!");}@Overridepublic String getName() {return "银狐狙击炮!";}@Overridepublic int getType() {return Weapon.TYPE_HOT;}
}
package 接口_变形金刚;public class Lyb implements Weapon {@Overridepublic void kill() {System.out.println("打狗!");}@Overridepublic String getName() {return "打狗棒";}@Overridepublic int getType() {return Weapon.TYPE_NUCLEAR;}
}
至此,我们已经创建了3个具体武器,并且实现了相应的“武器”应该具备的方法。换句话说,我们已经完成了接口和接口实现类的编写,接下来就是怎么使用它们了。
我们接下来开始编写“变形金刚”,并且把设计的接口使用起来。
package 接口_变形金刚;
/** 变形金刚使用Weapon接口 */
public class Transformer{// 使用Weapon接口,则需要将Weapon定义为一个成员// w默认值是nullprivate 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();} }
}