System.out.println(\增大汽车速度\); } public void decreasespeed( ) { System.out.println(\减小汽车速度\); // 输出减小随声听音量 } public void stopMove( ) { System.out.println(\汽车停止前进\); } public void startMove( ) { System.out.println(\汽车开始前进\); } } class Ship implements movable { public void increasespeed( ) { System.out.println(\增大轮船速度\); } public void decreasespeed( ) { System.out.println(\减小轮船速度\); // 输出减小随声听音量 } public void stopMove( ) { System.out.println(\轮船停止前进\); } public void startMove( ) { System.out.println(\轮船开始前进\); } } class Aircraft implements movable { public void increasespeed( ) { System.out.println(\增大飞机速度\); } public void decreasespeed( ) { System.out.println(\减小飞机速度\); } public void stopMove( ) { System.out.println(\飞机停止前进\); } public void startMove( ) { System.out.println(\飞机开始前进\); } } class People1{ private String name; private int age;
public void move(movable m) { m.startMove( ); } } public class Myinterface { public static void main(String[] args) { int i; People1 sportsman = new People1( ); Scanner scanner = new Scanner(System.in); movable[] moveDevice = new movable[3]; moveDevice[0] = new Car( ); moveDevice[1] = new Ship( ); moveDevice[2]=new Aircraft(); //创建手机对象并赋值给soundDevice[2] System.out.println(\你想使用哪种交通工具? 请输入选择:0-汽车 1-轮船 2-飞机\); i = scanner.nextInt( ); sportsman.move(moveDevice[i]); moveDevice[i].increasespeed( ); moveDevice[i].stopMove();//调用stopMove( )方法 class tongxun implements movable{ public void StopMove(){ System.out.println(\停止前进 \); } public void StartMove(){ System.out.println(\开始前进\); } @Override public void increasespeed() { // TODO Auto-generated method stub } @Override public void decreasespeed() { // TODO Auto-generated method stub } @Override public void stopMove() { // TODO Auto-generated method stub }
} } @Override public void startMove() { // TODO Auto-generated method stub } } 程序运行结果: 点评 接口的特点在于只定义能做什么 , 而不定义怎么去做。在本实验中 , 收音机 Radio, 随身听 Walkman 和手机 Mobilephone 分别以自己的方式实现了 Soundable 接口 , 当接口成为 Listen(Soundable s) 方法的形参时 , 任何实现了 Soundable 接口的对象都能成为它的实参 , 如果不用接口作形参 , 那就必须写 3 个不同的方法 , 即 listenRadio(Radio r), listenWalkman(Walkman w) , listenMobilephone(Mobilephone m)。 (二) 编写 3 个类 , 类名分别为 Clock、A、B, 其中类 Clock 和类 A 放在同一个包 packone 中 , 而类 B 则放在另一个包 packtwo 中 , 包 packone 和包 packtwo 放在同一个目录下。类 Clock 中有 3 个整型数据 hour、minute、second, 它们分别是 public、private、protected, 类 Clock 还包含一些方法使用这些数据。类 A 和类 B 的功能相似 , 都是使用类 Clock 并调用类 C1ock 中的方法。请按照下面的实验步骤 , 循序渐进的完成实验 , 并回答后面的问题。 首先在 c:\\programming 目录下创建一个文件夹 , 命名为 packone, 然后在该文件夹下创建一个名叫 Clock.java 的程序 , 打开文本编辑器按程序清单输入该程序。 程序清单Clock.java package packone; public class Clock { public int hour; private int minute; protected int second; public Clock(int i, int j, int k) { setAll(i, j, k);
} } void setAll(int i, int j, int k) { hour = i; minute = j; second = k; } public int getHour() { return hour; } public int getMinute() { return minute; } public int getSecond() { return second; } (2) 接着在 packone 文件夹下创建第二个程序命名为 A.java, 打开文本编辑器按程序清单输入该程序。 程序清单A.java package packone; class A { public static void main(String[] args) { Clock c = new Clock(5,20,10); System.out.println(\从类A中访问Clock hour=\ System.out.println(\从类A中访问Clock minute=\ System.out.println(\从类A中访问Clock second=\ } } (3) 现在在 c:\\programming 目录下创建第二个文件夹 , 命名为 packtwo, 然后在该文件夹下创建一个名为 B.java 的程序 , 打开文本编辑器按如下程序清单输入该程序。 程序清单B.java package packtwo; import packone.*; class B { public static void main(String[] args) { Clock c = new Clock(8,30,5); System.out.println(\从类B中访问Clock hour=\ System.out.println(\从类B中访问Clock minute=\ System.out.println(\从类B中访问Clock second=\ } }
至此已经编辑好了 3 个源程序 , 然后在Eclipse 环境中分别编译运行packone 文件夹和 packtwo 文件夹中的程序,编译的结果将分别在 packone 文件夹和 packtwo 文件夹中生成 Clock.class,A.class 和 B.class 文件。接着分别运行这两个程序 , 观察程序输出结果。 程序A报错: The field Clock.minute is not visible;minute是私有数据类型,只有本类可以访问 程序B正常