小时候数学老师的随堂测验,都是在黑板上抄题目,然后再作答案。写一个抄题目的程序。
/** * 学生甲抄的试卷 * Created by callmeDevil on 2019/7/14. */public class TestPaperA { // 试题1 public void testQuestion1(){ System.out.println("路飞在顶上战争之后,修炼了多久? a.3天 b.2年 c.2天 d.3年"); System.out.println("答案:b"); } // 试题2 public void testQuestion2(){ System.out.println("鸣人是第几代火影? a.六代 b.七代 c.八代 d.九代"); System.out.println("答案:b"); }}
/**
* 学生甲抄的试卷
* Created by callmeDevil on 2019/7/14.
*/
public class TestPaperA {
// 试题1
public void testQuestion1(){
System.out.println("路飞在顶上战争之后,修炼了多久? a.3天 b.2年 c.2天 d.3年");
System.out.println("答案:b");
}
// 试题2
public void testQuestion2(){
System.out.println("鸣人是第几代火影? a.六代 b.七代 c.八代 d.九代");
/** * 学生乙抄的试卷 * Created by callmeDevil on 2019/7/14. */public class TestPaperB { // 试题1 public void testQuestion1(){ System.out.println("路飞在顶上战争之后,修炼了多久? a.3天 b.2年 c.2天 d.3年"); System.out.println("答案:a"); } // 试题2 public void testQuestion2(){ System.out.println("鸣人是第几代火影? a.六代 b.七代 c.八代 d.九代"); System.out.println("答案:a"); }}
* 学生乙抄的试卷
public class TestPaperB {
System.out.println("答案:a");
public class Test { public static void main(String[] args) { System.out.println("学生甲抄的试卷:"); TestPaperA studentA = new TestPaperA(); studentA.testQuestion1(); studentA.testQuestion2(); System.out.println("学生乙抄的试卷:"); TestPaperB studentB = new TestPaperB(); studentB.testQuestion1(); studentB.testQuestion2(); }}
public class Test {
public static void main(String[] args) {
System.out.println("学生甲抄的试卷:");
TestPaperA studentA = new TestPaperA();
studentA.testQuestion1();
studentA.testQuestion2();
System.out.println("学生乙抄的试卷:");
TestPaperB studentB = new TestPaperB();
studentB.testQuestion1();
studentB.testQuestion2();
学生甲抄的试卷:路飞在顶上战争之后,修炼了多久? a.3天 b.2年 c.2天 d.3年答案:b鸣人是第几代火影? a.六代 b.七代 c.八代 d.九代答案:b学生乙抄的试卷:路飞在顶上战争之后,修炼了多久? a.3天 b.2年 c.2天 d.3年答案:a鸣人是第几代火影? a.六代 b.七代 c.八代 d.九代答案:a
学生甲抄的试卷:
路飞在顶上战争之后,修炼了多久? a.3天 b.2年 c.2天 d.3年
答案:b
鸣人是第几代火影? a.六代 b.七代 c.八代 d.九代
学生乙抄的试卷:
答案:a
两个学生抄试卷都非常类似,除了答案不同,没什么不一样,这样又容易错,又难以维护。因此老师出一份试卷,打印多份,让学生填写答案就可以了。应该把试题和答案分离,抽出一个父类,让两个子类继承它,公共的试题代码写到父类当中就行了。
/** * 试题父类-动漫考题 * Created by callmeDevil on 2019/7/14. */public class TestPaper { // 试题1 public void testQuestion1(){ System.out.println("路飞在顶上战争之后,修炼了多久? a.3天 b.2年 c.2天 d.3年"); } // 试题2 public void testQuestion2(){ System.out.println("鸣人是第几代火影? a.六代 b.七代 c.八代 d.九代"); } }
* 试题父类-动漫考题
public class TestPaper {
/** * 学生甲抄的试卷-版本2 * Created by callmeDevil on 2019/7/14. */public class TestPaperA2 extends TestPaper{ @Override public void testQuestion1() { super.testQuestion1(); System.out.println("答案:b"); } @Override public void testQuestion2() { super.testQuestion2(); System.out.println("答案:b"); }}
* 学生甲抄的试卷-版本2
public class TestPaperA2 extends TestPaper{
@Override
public void testQuestion1() {
super.testQuestion1();
public void testQuestion2() {
super.testQuestion2();
/** * 学生乙抄的试卷-版本2 * Created by callmeDevil on 2019/7/14. */public class TestPaperB2 extends TestPaper{ @Override public void testQuestion1(){ super.testQuestion1(); System.out.println("答案:a"); } @Override public void testQuestion2(){ super.testQuestion2(); System.out.println("答案:a"); }}
* 学生乙抄的试卷-版本2
public class TestPaperB2 extends TestPaper{
客户端测试代码与测试结果此处省略,同上述简单实现。
定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定的步骤。
/** * 模板方法父类-动漫考题 * Created by callmeDevil on 2019/7/14. */public abstract class TestPaper { // 试题1 public void testQuestion1(){ System.out.println("路飞在顶上战争之后,修炼了多久? a.3天 b.2年 c.2天 d.3年"); System.out.println("答案:" + answer1());//改成一个虚方法,下同 } // 试题2 public void testQuestion2(){ System.out.println("鸣人是第几代火影? a.六代 b.七代 c.八代 d.九代"); System.out.println("答案:" + answer2()); } // 此方法的目的就是给继承的子类重写,因为这里每个人的答案都是不同的 public abstract String answer1(); public abstract String answer2();}
* 模板方法父类-动漫考题
public abstract class TestPaper {
System.out.println("答案:" + answer1());//改成一个虚方法,下同
System.out.println("答案:" + answer2());
// 此方法的目的就是给继承的子类重写,因为这里每个人的答案都是不同的
public abstract String answer1();
public abstract String answer2();
/** * 学生甲抄的试卷-模板方法实现 * Created by callmeDevil on 2019/7/14. */public class TestPaperA3 extends TestPaper{ @Override public String answer1() { return "b"; } @Override public String answer2() { return "b"; }}
* 学生甲抄的试卷-模板方法实现
public class TestPaperA3 extends TestPaper{
public String answer1() {
return "b";
public String answer2() {
/** * 学生乙抄的试卷-模板方法实现 * Created by callmeDevil on 2019/7/14. */public class TestPaperB3 extends TestPaper{ @Override public String answer1() { return "a"; } @Override public String answer2() { return "a"; }}
* 学生乙抄的试卷-模板方法实现
public class TestPaperB3 extends TestPaper{
return "a";
/** * 模板方法测试 * Created by callmeDevil on 2019/7/14. */public class Test3 { public static void main(String[] args) { System.out.println("学生甲抄的试卷:"); // 将子类变量的声明改成父类,利用多态性实现了代码的复用 TestPaper studentA = new TestPaperA3(); studentA.testQuestion1(); studentA.testQuestion2(); System.out.println("学生乙抄的试卷:"); TestPaper studentB = new TestPaperB3(); studentB.testQuestion1(); studentB.testQuestion2(); }}
* 模板方法测试
public class Test3 {
// 将子类变量的声明改成父类,利用多态性实现了代码的复用
TestPaper studentA = new TestPaperA3();
TestPaper studentB = new TestPaperB3();
测试结果是一致的,此处不再贴出。
原文链接:http://www.cnblogs.com/call-me-devil/p/11184272.html
本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728