定义一个抽象类Weapon(java),用接口来实现。
2017-07-25 18:13
387 查看
用接口实现:
(1)、定义一个接口IAssaultable(可攻击的),该接口有一个抽象方法attack()。
(2)、定义一个接口IMobile(可移动的),该接口有一个抽象方法move()。
(3)、定义一个抽象类Weapon,实现IAssaultable接口和IMobile接口,但并没有给出具体的实现方法。
(4)、定义3个类:Tank,Flighter,WarShip都继承自Weapon,分别用不同的方式实现Weapon类中的抽象方法。
(5)、写一个类Army,代表一支军队,这个类有一个属性是Weapon数组w(用来存储该军队所拥有的所有武器);
该类还提供一个构造方法,在构造方法里通过传一个int类型的参数来限定该类所能拥有的最大武器数量,并用这一大小来初始化数组w。
该类还提供一个方法addWeapon(Weapo wa),表示把参数wa所代表的武器加入到数组w中。
在这个类中还定义两个方法attackAll()和moveAll(),让w数组中的所有武器攻击和移动。
(6)、写一个主方法去测试以上程序。
=====================================================================================================
直接附代码:
新建IAssaultable接口:
package com.qikai.Day08WeaponInterFace;
public interface IAssaultable {
void attack();
}
新建IMobile 接口:
package com.qikai.Day08WeaponInterFace;
public interface IMobile {
void move();
}
接着建Weapon类:继承上面两个接口;
package com.qikai.Day08WeaponInterFace;
//定义一个抽象类Weapon,该抽象类有两个抽象方法attack(),move()
//这两个方法分别表示武器的攻击方式和移动方式。
public abstract class Weapon implements IAssaultable,IMobile {
public abstract void attack(); // 武器攻击方式
public abstract void move(); // 武器移动方式
}
分别建坦克,飞机,军舰 ,和军队类;坦克,飞机,军舰分别继承Weapon类;
package com.qikai.Day08WeaponInterFace;
public class Tank extends Weapon {
@Override
public void attack() {
System.out.println("坦克!开炮!");
}
@Override
public void move() {
System.out.println("坦克 撤退!");
}
}
军队类:
package com.qikai.Day08WeaponInterFace;
public class Army {
private Weapon[] w;
public Army() {
}
public Army(int num) {
this.w = new Weapon[num];
}
// 定义 添加武器方法
public void addWeapon(Weapon wa){
boolean Full=true; // 创建 boolean变量 Full 判断武器库是否满
for (int i = 0; i < w.length; i++) {
// 如果没满;
if (w[i]==null) {
w[i]=wa;
Full=false; // 没满结束循环;
break;
}
}
// 如果满了,输出 武器库满了!
if (Full) {
System.out.println("武器库已满...");
}
}
// 定义 所有武器攻击 方法;
// 使用 数组的遍历 ,如果当前位置存放的有武器,攻击!
public void attackAll() {
for (int i = 0; i < w.length; i++) {
if (w[i] != null) {
w[i].attack();
}
}
}
// 定义 所有 武器 移动
// 使用 数组的遍历 ,如果当前位置存放的有武器,移动!
public void moveAll() {
for (int i = 0; i < w.length; i++) {
if (w[i] != null) {
w[i].move();
}
}
}
}
测试类:
package com.qikai.Day08WeaponInterFace;
public class Test {
public static void main(String[] args) {
Weapon w1=new Tank();
Weapon w2=new Flighter();
Weapon w3=new Warship();
Army army=new Army(3); // Army的构造方法 :通过输入一个数字来确定数组的长度
army.addWeapon(w1);
army.addWeapon(w2); // 调用 Army中的方法 给数组赋值 w1是坦克 ,w2 是飞机, w3是军舰
army.addWeapon(w3);
army.attackAll();
army.moveAll();
army.addWeapon(w1); // 继续添加 提示 武器库 满了 ...
}
}
(1)、定义一个接口IAssaultable(可攻击的),该接口有一个抽象方法attack()。
(2)、定义一个接口IMobile(可移动的),该接口有一个抽象方法move()。
(3)、定义一个抽象类Weapon,实现IAssaultable接口和IMobile接口,但并没有给出具体的实现方法。
(4)、定义3个类:Tank,Flighter,WarShip都继承自Weapon,分别用不同的方式实现Weapon类中的抽象方法。
(5)、写一个类Army,代表一支军队,这个类有一个属性是Weapon数组w(用来存储该军队所拥有的所有武器);
该类还提供一个构造方法,在构造方法里通过传一个int类型的参数来限定该类所能拥有的最大武器数量,并用这一大小来初始化数组w。
该类还提供一个方法addWeapon(Weapo wa),表示把参数wa所代表的武器加入到数组w中。
在这个类中还定义两个方法attackAll()和moveAll(),让w数组中的所有武器攻击和移动。
(6)、写一个主方法去测试以上程序。
=====================================================================================================
直接附代码:
新建IAssaultable接口:
package com.qikai.Day08WeaponInterFace;
public interface IAssaultable {
void attack();
}
新建IMobile 接口:
package com.qikai.Day08WeaponInterFace;
public interface IMobile {
void move();
}
接着建Weapon类:继承上面两个接口;
package com.qikai.Day08WeaponInterFace;
//定义一个抽象类Weapon,该抽象类有两个抽象方法attack(),move()
//这两个方法分别表示武器的攻击方式和移动方式。
public abstract class Weapon implements IAssaultable,IMobile {
public abstract void attack(); // 武器攻击方式
public abstract void move(); // 武器移动方式
}
分别建坦克,飞机,军舰 ,和军队类;坦克,飞机,军舰分别继承Weapon类;
package com.qikai.Day08WeaponInterFace;
public class Tank extends Weapon {
@Override
public void attack() {
System.out.println("坦克!开炮!");
}
@Override
public void move() {
System.out.println("坦克 撤退!");
}
}
package com.qikai.Day08WeaponInterFace; public class Flighter extends Weapon { @Override public void attack() { System.out.println("飞机!射击!"); } @Override public void move() { System.out.println("飞机 撤退!"); } }
package com.qikai.Day08WeaponInterFace; public class Warship extends Weapon { @Override public void attack() { System.out.println("军舰!发射!"); } @Override public void move() { System.out.println("军舰 撤退!"); } }
军队类:
package com.qikai.Day08WeaponInterFace;
public class Army {
private Weapon[] w;
public Army() {
}
public Army(int num) {
this.w = new Weapon[num];
}
// 定义 添加武器方法
public void addWeapon(Weapon wa){
boolean Full=true; // 创建 boolean变量 Full 判断武器库是否满
for (int i = 0; i < w.length; i++) {
// 如果没满;
if (w[i]==null) {
w[i]=wa;
Full=false; // 没满结束循环;
break;
}
}
// 如果满了,输出 武器库满了!
if (Full) {
System.out.println("武器库已满...");
}
}
// 定义 所有武器攻击 方法;
// 使用 数组的遍历 ,如果当前位置存放的有武器,攻击!
public void attackAll() {
for (int i = 0; i < w.length; i++) {
if (w[i] != null) {
w[i].attack();
}
}
}
// 定义 所有 武器 移动
// 使用 数组的遍历 ,如果当前位置存放的有武器,移动!
public void moveAll() {
for (int i = 0; i < w.length; i++) {
if (w[i] != null) {
w[i].move();
}
}
}
}
测试类:
package com.qikai.Day08WeaponInterFace;
public class Test {
public static void main(String[] args) {
Weapon w1=new Tank();
Weapon w2=new Flighter();
Weapon w3=new Warship();
Army army=new Army(3); // Army的构造方法 :通过输入一个数字来确定数组的长度
army.addWeapon(w1);
army.addWeapon(w2); // 调用 Army中的方法 给数组赋值 w1是坦克 ,w2 是飞机, w3是军舰
army.addWeapon(w3);
army.attackAll();
army.moveAll();
army.addWeapon(w1); // 继续添加 提示 武器库 满了 ...
}
}
相关文章推荐
- Java实例 定义任务的一个发射小程序 实现Runnable接口并编写run()方法
- Java回顾:用一个Demo来说明继承抽象类和实现接口的简单框架模型
- java为数据结构中的映射定义了一个接口java.util.Map;它有四个实现类HashMap Hashtable LinkedHashMap 和TreeMap.
- 定义一个抽象类Weapon(java)
- 【ThinkingInJava】16、关于java的接口与抽象类实现的一个问题!
- Java——抽象类实现接口
- VC实现java定义的接口的一些方法
- java 学习 私有类实现接口 ,一个类继承来的方法和接口实现方法重复第八天
- java中判断一个对象是否实现了某个接口
- 抽象类与接口的一个程序实现
- java 匿名类(不能被忽略 (new+接口)是定义匿名类的一个形式)(转)
- java减少数据访问层代码—反射3—数据访问层就一个接口一个实现
- java中判断一个对象是否实现了某个接口
- java 中关于抽象类和接口的范例,通过多态中的向上转移实现
- 一个饲养员给动物喂食物的例子体现JAVA中的面向对象思想,接口(抽象类)的用处
- 学习java笔记 --- 一个实现Iterable<E>接口的小范例
- java 抽象类实现接口
- java中的继承问题,类B继承A,那么构造方法需要这样写吗?这不是重复吗?还有接口与抽象类怎么实现?
- Java中接口的定义与实现接口抽象方法
- 做一个饲养员给动物喂食物的例子体现JAVA中的面向对象思想,接口(抽象类)的用处