课后作业一:接口多态:使用接口代替抽象基类

1.源代码:

  1. package zoo4;
  2.  
  3. import java.util.Vector;
  4.  
  5. public class Zoo2 {
  6.  
  7. public static void main(String args[]) {
  8. Feeder f = new Feeder("小李");
  9. Vector<Animal> ans = new Vector<Animal>();//可随时向其中加入或移除对象
  10.  
  11. //饲养员小李喂养一只狮子
  12. ans.add(new Lion());
  13. //饲养员小李喂养十只猴子
  14. for (int i = 0; i < 10; i++) {
  15. ans.add(new Monkey());
  16. }
  17. //饲养员小李喂养5只鸽子
  18. for (int i = 0; i < 5; i++) {
  19. ans.add(new Pigeon());
  20. }
  21. f.feedAnimals(ans);
  22. }
  23. }
  24.  
  25. class Feeder {
  26.  
  27. public String name;
  28.  
  29. Feeder(String name) {
  30. this.name = name;
  31. }
  32.  
  33. public void feedAnimals(Vector<Animal> ans) {
  34. for (Animal an : ans) {
  35. an.eat();
  36. }
  37. }
  38. }
  39.  
  40. interface Animal {
  41.  
  42. public void eat();
  43. }
  44.  
  45. class Lion implements Animal {
  46.  
  47. public void eat() {
  48. System.out.println("我不吃肉谁敢吃肉!");
  49. }
  50. }
  51.  
  52. class Monkey implements Animal {
  53.  
  54. public void eat() {
  55. System.out.println("我什么都吃,尤其喜欢香蕉。");
  56. }
  57. }
  58.  
  59. class Pigeon implements Animal {
  60.  
  61. public void eat() {
  62. System.out.println("我要减肥,所以每天只吃一点大米。");
  63. }
  64. }

2.运行截图:

课后作业二:用多态的方法模拟ATM操作流程。

1.源程序:

  1. package Work;
  2. //接口多态:使用接口代替抽象基类
  3. //李慧,2016.11.18
  4. import java.util.Scanner;
  5. import java.util.Vector;
  6.  
  7. public class ATM{
  8. static AccountY stu[]=new Account[500];
  9.  
  10. public static void main(String[] args) {
  11. // TODO Auto-generated method stub
  12. //主界面(5个用户)
  13. stu[0]=new Account("20153150","李慧","2016/11/15","123456",1000);
  14. stu[1]=new Account("20153151","李","2016/11/15","li",2000);
  15. stu[2]=new Account("20153152","木子","2016/11/15","muzi",3000);
  16. stu[3]=new Account("20153149","诺米","2016/11/15","nuomi",5000);
  17. stu[4]=new Account("20153148","夏小暑","2016/11/15","xiaxiaoshu",4800);
  18. String key;
  19. Scanner scan=new Scanner(System.in);
  20. Scanner scan1=new Scanner(System.in);
  21. Scanner scan2=new Scanner(System.in);
  22. Scanner scan3=new Scanner(System.in);
  23. int num=0;
  24. int k=1;
  25. System.out.println("请输入密码:");
  26. key=scan.nextLine();
  27. int b=0;
  28. for(int i=0;i< 5;i++)
  29. { if(!key.equals(stu[i].getKey()))
  30. { b++;}}
  31. if(b>=5){
  32. System.out.print("该卡已被锁定,无法操作");
  33. }
  34. else
  35. for(int i=0;i< 5;i++)
  36. {
  37. if(key.equals(stu[i].getKey()))
  38. {
  39. while(k==1)
  40. {
  41. System.out.println();
  42. System.out.print("1.存款 2.取款 3.转账汇款 4.修改密码 5.查询余额 6.退卡");
  43. System.out.println();
  44. System.out.print("请选择:");
  45. num=scan1.nextInt();
  46. if(num==6)
  47. { System.out.println("卡已成功退出!请拿卡!");
  48. break;
  49. }
  50. switch(num)
  51. {
  52. case 1://存款
  53. double m;
  54. System.out.print("请输入存入的金额:");
  55. m=scan2.nextDouble();
  56. stu[i].cun(m);
  57. break;
  58. case 2://取款
  59. int numm;
  60. System.out.print("100元\t500元\t1000元\t1500元\t2000元\t5000元\t其他金额\n"
  61. + "1.退卡");
  62. System.out.println();
  63. System.out.print("请选择:");
  64. numm=scan3.nextInt();
  65. if(numm==1) break;
  66. else
  67. stu[i].qu(numm);break;
  68. case 3://转账汇款
  69. String nummm;
  70. double cc;
  71. int n;
  72. System.out.print("请输入转账行号:");
  73. nummm=scan.nextLine();
  74. /*boolean b=true;
  75. for(int j=0;j<5;j++)
  76. {if(!nummm.equals(stu[j].getNum()))
  77. {
  78. b=false;
  79. }}
  80. if(b==false){
  81. System.out.println("信息错误!");
  82. }*/
  83. for(int j=0;j<5;j++)
  84. if(nummm.equals(stu[j].getNum()))
  85. {
  86. System.out.print("请输入转账金额:");
  87. cc=scan.nextDouble();
  88. System.out.print("请确认(1确认,0取消)");
  89. n=scan.nextInt();
  90. if(n==1)
  91. {
  92. stu[i].qu(cc);
  93. stu[j].cun(cc);
  94. System.out.print("转账成功!");
  95. }
  96. else if(n==0){
  97. System.out.print("已取消!");
  98. }
  99. else{
  100. System.out.print("发生错误!");
  101. }
  102. }
  103. break;
  104. case 4:
  105. String kk;
  106. System.out.print("请输入修改的密码:");
  107. kk=scan.nextLine();
  108. stu[i].setKey(kk);
  109. break;
  110. case 5:
  111. System.out.print("余额为:"+stu[i].getMoney());
  112. break;
  113. case 6:
  114. break;
  115. }
  116. }
  117. }}
  118.  
  119. }
  120. }
  121.  
  122. abstract class AccountY
  123. {
  124. public abstract String getNum();
  125. public abstract void setKey(String s);
  126. public abstract String getKey();
  127. public abstract double getMoney();
  128. public abstract void cun(double m);
  129. public abstract void qu(double m);
  130. }
  131.  
  132. class Account extends AccountY{
  133. private String num;//长度为11,由数字和字符组合
  134. private String name;//用户的姓名
  135. private String Date;//操作日期
  136. private String key;//账户密码
  137. private double money;//当前余额
  138. public Account(String n,String a,String b,String c,double d){num=n;name=a;Date=b;key=c;money=d;}
  139. public String getNum(){return num;}
  140. public String getName(){return name;}
  141. public String getDate(){return Date;}
  142. public void setKey(String s){
  143. key=s;
  144. }
  145. public String getKey(){return key;}
  146. public double getMoney(){return money;}
  147. public void cun(double m){
  148. if(m<=200000)
  149. money+=m;
  150. else
  151. {System.out.println("超出限额!");}
  152. }
  153. public void qu(double m){
  154. if(m<money)
  155. money-=m;
  156. else
  157. System.out.println("超出余额!");
  158. }
  159. }

2.运行结果截图:

验证:

①TestInstanceof.java

代码如下:

  1. public class TestInstanceof
  2. {
  3. public static void main(String[] args)
  4. {
  5. //声明hello时使用Object类,则hello的编译类型是Object,Object是所有类的父类
  6. //但hello变量的实际类型是String
  7. Object hello = "Hello";
  8. //String是Object类的子类,所以返回true。
  9. System.out.println("字符串是否是Object类的实例:" + (hello instanceof Object));
  10. //返回true。
  11. System.out.println("字符串是否是String类的实例:" + (hello instanceof String));
  12. //返回false。
  13. System.out.println("字符串是否是Math类的实例:" + (hello instanceof Math));
  14. //String实现了Comparable接口,所以返回true。
  15. System.out.println("字符串是否是Comparable接口的实例:" + (hello instanceof Comparable));
  16. String a = "Hello";
  17. //String类既不是Math类,也不是Math类的父类,所以下面代码编译无法通过
  18. //System.out.println("字符串是否是Math类的实例:" + (a instanceof Math));
  19. }
  20. }

运行结果截图:

②TestCast.java

代码如下:

  1. class Mammal{}
  2. class Dog extends Mammal {}
  3. class Cat extends Mammal{}
  4.  
  5. public class TestCast
  6. {
  7. public static void main(String args[])
  8. {
  9. Mammal m;
  10. Dog d=new Dog();
  11. Cat c=new Cat();
  12. m=d;
  13. //d=m;
  14. d=(Dog)m;
  15. //d=c;
  16. //c=(Cat)m;
  17.  
  18. }
  19. }

运行结果没有出错!

③Zoo.java

代码如下:

  1. package zoo4;
  2.  
  3. import java.util.Vector;
  4.  
  5. public class Zoo {
  6.  
  7. public static void main(String args[]) {
  8. Feeder f = new Feeder("小李");
  9. Vector<Animal> ans = new Vector<Animal>();//可随时向其中加入或移除对象
  10.  
  11. //饲养员小李喂养一只狮子
  12. ans.add(new Lion());
  13. //饲养员小李喂养十只猴子
  14. for (int i = 0; i < 10; i++) {
  15. ans.add(new Monkey());
  16. }
  17. //饲养员小李喂养5只鸽子
  18. for (int i = 0; i < 5; i++) {
  19. ans.add(new Pigeon());
  20. }
  21. f.feedAnimals(ans);
  22. }
  23. }
  24.  
  25. class Feeder {
  26.  
  27. public String name;
  28.  
  29. Feeder(String name) {
  30. this.name = name;
  31. }
  32.  
  33. public void feedAnimals(Vector<Animal> ans) {
  34. for (Animal an : ans) {
  35. an.eat();
  36. }
  37. }
  38. }
  39.  
  40. abstract class Animal {
  41.  
  42. public abstract void eat();
  43. }
  44.  
  45. class Lion extends Animal {
  46.  
  47. public void eat() {
  48. System.out.println("我不吃肉谁敢吃肉!");
  49. }
  50. }
  51.  
  52. class Monkey extends Animal {
  53.  
  54. public void eat() {
  55. System.out.println("我什么都吃,尤其喜欢香蕉。");
  56. }
  57. }
  58.  
  59. class Pigeon extends Animal {
  60.  
  61. public void eat() {
  62. System.out.println("我要减肥,所以每天只吃一点大米。");
  63. }
  64. }

运行结果截图:

JAVA08多态之课程问题解决的更多相关文章

  1. JAVA字符串05之课程问题解决

    (一)古罗马皇帝凯撒在打仗时曾经使用过以下方法加密军事情报:请编写一个程序,使用上述算法加密或解密用户输入的英文字串. 1.设计思想:首先选择是加密字符串还是解密字符串,两种算法相似.如果要加密字符串 ...

  2. JAVA语法02之课程问题解决

    (一)示例程序+运行结果: ①EnumTest.java public class EnumTest { public static void main(String[] args) { Size s ...

  3. java-08多态与异常处理

    1.运行以下代码: public class ParentChildTest { public static void main(String[] args) { Parent parent=new ...

  4. JAVA编程讲座-吴老

    JAVA系列公开课第4讲:多态系列课程:从JAVA编程零基础讲起,同时结合工作中遇到的具体实例,语言清晰易懂,连续10周+深入讲解,打下编程基础,让我们一起打来自动化测试的大门时间:4月25日(周一) ...

  5. .NET Core CSharp初级篇 1-5 接口、枚举、抽象

    .NET Core CSharp初级篇 1-5 本节内容类的接口.枚举.抽象 简介 问题 如果你需要表示星期或者是某些状态,使用字符串或者数字是否不直观? 你是否发现,无论何种电脑,它的USB口的设计 ...

  6. php课程 12-41 多态是什么

    php课程 12-41 多态是什么 一.总结 一句话总结:一种请求,多种响应(根据参数类型和数量) 1.function useUsb(Usb $usb){}这句话是什么意思? 判断$usb参数是否实 ...

  7. java基础课程笔记 static 主函数 静态工具类 classpath java文档注释 静态代码块 对象初始化过程 设计模式 继承 子父类中的函数 继承中的构造函数 对象转型 多态 封装 抽象类 final 接口 包 jar包

    Static那些事儿 Static关键字 被static修饰的变量成为静态变量(类变量) 作用:是一个修饰符,用于修饰成员(成员变量,成员方法) 1.被static修饰后的成员变量只有一份 2.当成员 ...

  8. 20155228 2016-2017-2《Java程序设计》课程总结

    20155228 2016-2017-2<Java程序设计>课程总结 每周作业链接汇总 预备作业1 简要内容 了解「Trainer/Trainee」是最好的师生关系,对即将到来的翻转课堂有 ...

  9. [课程设计]Scrum 1.6 多鱼点餐系统开发进度

    [课程设计]Scrum 1.6 多鱼点餐系统开发进度(点餐页面按钮添加&修复) 1.团队名称:重案组 2.团队目标:长期经营,积累客户充分准备,伺机而行 3.团队口号:矢志不渝,追求完美 4. ...

随机推荐

  1. Windows Azure 将正式更名为 Microsoft Azure

    微软的公共云平台在2014年4月3日正式从Windows Azure 更名为Microsoft Azure. windows azure是二级产品名,microsoft azure是一级产品名,和mi ...

  2. 如何在LIRE搜索中使用多特征

    这是官网上的解答,先mark下来. http://www.semanticmetadata.net/wiki/lirefaq/ ==================================== ...

  3. ROCKETMQ源码分析笔记1:tools

    rocketmq源码解析笔记 大家好,先安利一下自己,本人男,35岁,已婚.目前就职于小资生活(北京),职位是开发总监. 姓名DaneBrown 好了.我保证本文绝不会太监!转载时请附上以上安利信息. ...

  4. 前言,学习ios编程(坚持)

    其实,尝尝有人很疑惑,不知道自己要干嘛,看到很多的培训机构,不知道怎么选择但是又想进入软件行业.其实呢学习不一定要靠培训机构,一定要培训,特别是 当人家把自己吹的天花乱坠的时候,然并卵.出来之后,也只 ...

  5. push_back模式工作

    自己决心今天做一个 xxx项目,写完xxx功能. 早晨9点多张三说:“A项目有一个 bug要修复”,估计十分钟就修复了,然后放弃手头项目去搞.修复这个bug的时候,发现这个A项目有些代码还有可以优化的 ...

  6. python实用小技巧自问自答系列(一):查看类中函数文档doc的方法

    问题:如何查看某个类的方法文档说明或者是函数的参数列表情况? 答: 方法一:直接在需要查询的方法后面加上".__doc__"即可以打印出该方法的文档说明(需要先导入该方法所属模块) ...

  7. dpkg: 处理归档 /var/cache/apt/archives/软件名 (--unpack)时出错:由于已经达到 MaxReports 限制,没有写入 apport 报告。

    一.环境介绍: OS:ubuntu16.04 64bit 二.错误如下: 正准备解包 .../libqt4-script_4%3a4.8.7+dfsg-5ubuntu2_i386.deb  ...正在 ...

  8. js基础:函数表达式和函数声明

    函数表达式和函数声明的区别.实际上,解析器在向执行环境中加载数据是,对函数表达式和函数声明并非一视同仁.解析器会率先读取函数声明,并使其在执行任何代码之前可用.而函数表达式,则必须等到解析器执行到它所 ...

  9. CSUOJ_1002

    /* * Title : A+B(III) * Data : 2016/11/09 * Author : Andrew */ #include <iostream> #include &l ...

  10. 关于json-p

    关于json-p 目录 关于json-p json-p是什么 json-p原理分析 json-p的缺点 json-p是什么 json-p实际上是一种跨域ajax发送http请求的方法,它不是什么全新的 ...