题目1
1 题目说明
按要求编写一个Java应用程序程序:
(1)定义一个接口CanFly,描述会飞的方法public void fly();
(2)分别定义类飞机和鸟,实现CanFly接口。
(3)定义一个测试类,测试飞机和鸟,在main方法中创建飞机对象和鸟对象
2 实验设计
3 运行界面截图与说明
题目1运行结果:正确地创建了鸟和飞机对象,鸟对象调用fly()方法输出了“我是鸟!”,飞机对象调用fly()方法输出了“我是飞机!”
4 代码
Bird.java
public class Bird implements CanFly{ public void fly() { System.out.println("我是鸟!"); } }
CanFly.java
public interface CanFly { public void fly(); }
Main.java
public class Main { public static void main(String[] args) { Bird bird=new Bird(); Plane plane=new Plane(); bird.fly(); plane.fly(); } }
Plane.java
public class Plane implements CanFly{ public void fly() { System.out.println("我是飞机!"); } public Plane() { } }
题目2
1 题目说明
面向接口编程
利用面对接口的编程实现动态的创建对象,符合开-闭原则,也就是增加了新的需求,核心类不变
创建接口:水果树
创建类:苹果树、橘子树、园丁
在主类中,根据输入的水果类型,输出不同的结果,体现多态。例如输入“苹果”,创建苹果树对象,输出“种了一棵苹果树”。
2 实验设计
题目2工程结构:FruitTree是一个接口,有getTreeName()方法获取当前水果树的名字。AppleTree类苹果树,有空构造函数,且实现了getTreeName()方法。OrangeTree类指飞机,也同样有构造函数,另外实现了getTreeName()方法。Gardener类是园丁,能调用PlantTree(FruitTree)种树,用到了接口回调和多态的技术。Main类有main函数进行测试,创建园丁,并让园丁种树。
3 运行界面截图与说明
输入“苹果树”,园丁正确地种了一棵苹果树。输入“橘子树”,园丁也能正确地种一棵橘子树。
4 代码
AppleTree.java
public class AppleTree implements FruitTree{ public AppleTree() { } public String getTreeName() { return "苹果树"; } }
FruitTree.java
public interface FruitTree { public String getTreeName(); }
Gardener.java
public class Gardener { public void PlantTree(FruitTree tree) { System.out.println("种了一棵"+tree.getTreeName()); } };
Main.java
import java.util.Scanner; public class Main { public static void main(String[] args) { // TODO Auto-generated method stub Gardener gardener=new Gardener(); System.out.println("请输入水果树类型"); Scanner sc=new Scanner(System.in); String TreeName=sc.next(); sc.close(); // System.out.println(TreeName); FruitTree fruittree; if (TreeName.equals(new String("苹果树"))) { fruittree=new AppleTree(); gardener.PlantTree(fruittree); } if (TreeName.equals(new String("橘子树"))) { //else { fruittree=new OrangeTree(); gardener.PlantTree(fruittree); } } }
OrangeTree.java
public class OrangeTree implements FruitTree{ public OrangeTree() { } public String getTreeName() { return "橘子树"; } }
题目3
1 题目说明
编写一个异常类,用于捕获类的异常。编写一个类,用于录入成绩数据,如果成绩不是0-100的整数,抛出一个异常。
2 实验设计
题目3工程结构:
ScoreException是异常类,这个异常类被抛出是因为用户输入的数字不是整数或者范围超出了0~100。
ScoreScanner是用于录入成绩的类,其ScanScore()方法会抛出异常ScoreException。
Main类包含main函数,用于测试。
3 运行界面截图与说明
题目3运行结果:根据提示,输入成绩。如果输入0~100范围内的数,则提示输入正确,程序正确地运行结束。
如果输入的不是整数,则抛出异常。该异常被catch住处理后,程序同样运行结束,并打印异常原因。
同样的,如果输入的数超出范围,则也会抛出异常。该异常被catch住处理后,程序同样运行结束,并打印异常原因。可以看出,输入的数超出范围的异常和输入不是整数的异常并不都是由同一行代码抛出。
4 代码
Main.java
public class Main { public static void main(String[] args) { // TODO Auto-generated method stub ScoreScanner scorescanner=new ScoreScanner(); try { System.out.println("请输入成绩:"); scorescanner.ScanScore(); System.out.println("输入正确"); } catch(ScoreException e) { System.out.println("输入错误!输入的可能不是整数,也可能超出范围!"); e.printStackTrace(); } finally { System.out.println("程序运行结束!"); } } }
ScoreException.java
@SuppressWarnings("serial") public class ScoreException extends Exception{ public ScoreException() { } }
ScoreScanner.java
import java.util.Scanner; public class ScoreScanner { public void ScanScore() throws ScoreException { Scanner sc=new Scanner(System.in); if (sc.hasNextInt()){ int num=sc.nextInt(); sc.close(); if (num<0||num>100) throw new ScoreException(); } else { sc.close(); throw new ScoreException(); } } }