`
isiqi
  • 浏览: 16003530 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

编程实例------打造武装部队(实战接口)

阅读更多

一、实例说明

这是一个很有趣的例子,该例将实现两个类车子和飞机,然后设计出两个具有攻击性的战斗工具,坦克和战斗机。将坦克和战斗机赋予两个动作,移动和射击。本例用来加深对继承和接口等Java面向对象程序设计中非常重要的概念。本例的源代码见随书光盘\source\chapter3\ *.java

二、基础知识点

本例主要用到了Java中接口的概念。

接口是一种标准、一些规范,只要符合这个接口所制定的标准和规范,那么产品就可以和别人同样符合这个接口的产品相互的沟通,因为大家都是使用同一个接口,所以在沟通上就变得很容易。

Java中,接口是由一些常量和抽象方法所组成的,接口中也只能包含着两种东西,一个接口的声明和类的声明是一样的,只不过把class这个关键字换成了interface,使用的格式如下:

<限定词> interface <接口名称> [ extends <接口名称>s]

三、技术要点

假设已经设计好了车子和飞机这两个类,如果现在要设计坦克和战斗机,那么坦克继承车子这个类,而战斗机继承飞机类。在坦克的类中加上发射这个方法,而在战斗机类中也加上发射这个方法,不过坦克发射的是炮弹,而战斗机发射的是飞弹。

那 么如何在坦克和战斗机这两个类中加上这个方法呢?利用抽象方法,可以在车子和飞机的类中加上发射这个抽象方法。问题是,不是所有的车子和飞机都需要这个方 法。比如说跑车继承车子类,它并不需要发射这个方法,比如说货车继承飞机类,它也不需要发射这个方法,所以使用抽象方法不行。

还有一种思路是设计一个抽象类,把攻击性相关的方法全放在类里面,然后需要使用的类再去继承这个类就好了。但是Java语言有个限制,就是不能多重继承。坦克和战斗机已经分别继承了车子和飞机,它们也就没有办法再去继承另一个类了。

这个时候就需要使用接口这个机制来帮我们解决这个问题。设计一个名为武器的接口,里面声明了一个发射方法,想要拥有武器功能的交通工具,就必须去实现这个接口。这样一来,继承的归继承,实现接口的归实现接口,就不会有刚才的问题产生了。下面是武器这个接口的程序代码:

public interface Weapon

{

public void shoot();

}

有了接口以后,任何想拥有接口所定义的方法类,就必须去实现这个接口。继承类是用extends这个关键字,而实现接口就用implements这个关键字,下面看看坦克这个类的实现:

public class Tank extends Car implements Weapon

{

public Tank()

{

}

public void shoot()

{

System.out.println("发射大炮");

}

}

注意

实现接口的声明必须写在继承声明之后,而在类中必须去实现接口所定义的方法。如果没有实现一个接口,没有实现接口里面定义的全部方法,那么该类就是一个抽象类,必须要在类声明中加上abstract,否则Java在编译时就会产生错误信息。

四、实现步骤

Jbulider9中新建一个类命名为Car.java,在Car.java文件中敲入下列代码:

//Car类代表车子,是坦克Tank的父类。

public class Car

{

public Car()

{

}

public void move(){

System.out.println("running");

}

}

Jbulider9中新建一个类命名为Plane.java,在Plane.java中敲入下列代码:

//Plane类代表飞机,是战斗机Fighter的父类

public class Plane

{

public Plane()

{

}

public void move(){

System.out.println("flying");

}

}

Jbulider9中新建一个类命名为Weapon.java,在Weapon.java中敲入下列代码:

//武器接口

public interface Weapon

{

public void shoot();

}

Jbulider9中新建一个类命名为Tank.java,在Tank.java中敲入下列代码:

//坦克类,继承了Car类并使用了Weapon接口

public class Tank extends Car implements Weapon

{

public Tank()

{

}

public void shoot()

{

System.out.println("发射大炮");

}

}

Jbulider9中新建一个类命名为Figher.java,在Fighter.java中敲入下列代码:

//战斗机类,继承了plane类并使用了Weapon接口

public class Fighter extends Plane implements Weapon

{

public Fighter()

{

}

public void shoot(){

System.out.println("发射飞弹");

}

}

下面来测试一下造出来的装备的效果,在Jbulider9中新建一个类命名为Battle.java,在Battle.java中敲入下列代码:

public class Battle

{

public Battle()

{

}

public static void main(String argv[]){

Tank tank = new Tank(); //生成一个坦克

Fighter fighter = new Fighter(); //生成一个战斗机

tank.move(); //坦克移动

tank.shoot(); //坦克射击

fighter.move(); //战斗机移动

fighter.shoot(); //战斗机射击

}

}

编译并运行Battle.java结果如下所示:

running

发射大炮

flying

发射飞弹

五、归纳总结

Java的类是不允许同时继承多个类的,也就是不允许所谓的多重继承。主要原因是让整个继承的结构明确完整,不会弄得很繁杂。可以使用多重接口的方法来完成类的多重继承机制。本例演示了继承和接口这两个非常重要概念的应用。

本章小结

本章介绍了Java面向对象的编程基础,包括类的基本概念、继承与多态、包和接口等。可以说本章的内容是本书中最为重要的一章。希望读者能够针对本章的概念大量的上机练习,尤其是对难以理解的概念,更要实际练一练。

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics