1>

请看以下“变态”的类(参看示例ParentChildTest.java)

上述代码的特点是: 子类和父类定义了一模一样的字段和方法

运行以下测试代码

1. 上边的程序运行结果是什么?

2. 你如何解释会得到这样的输出?

第一个100:是parent调用PrintValue方法输出parent类中myValue值为100;

第二个200:是child调用PrintValue方法输出child类中myValue值为200;

第三个200:是parent = child,将子类对象的赋值给父类,但此时parent只能调用子类的方法,调用子类PrintValue时,输出的当然是子类的myValue值200。

第四个200:虽然parent = child,但parent不能调用子类的变量,所以parent.myValue++;只是将父类对象中的变量myValue值+1但不能改变子类的myValue值,但调用的是子类PrintValue方法时,输出的是子类的myValue值200。

第五个201:(Child)parent,强制转化parent为child对象,此时parent完全成为child对象,所以输出值为201。

3. 计算机是不会出错的,之所以得到这样的运行结果也是有原因的, 那么从这些运行结果中,你能总 结出Java的哪些语法特性?

(1):当子类和父类拥有同名方法时,并且让一个父类变量引用一个子类对象时,调用哪个方法由自己的真实类型来决定。

(2):如果子类与父类有相同的字段,则子类中的字段会代替或隐藏父类的字段,子类方法中访问的是子类中的字段(而不是父类中的字段)。

2>

用多态的方法模拟ATM操作流程。

  1. import java.util.Scanner;
  2. abstract class atma{
  3. public abstract void QuKuan();
  4. public abstract void CunKuan();
  5. public abstract void ZhuanZhang();
  6. public abstract void updataMima(String str);
  7. public abstract void showMoney();
  8. }
  9. public class ATM {
  10.  
  11. public static void main(String[] args) {
  12. // TODO Auto-generated method stub
  13. Account A = new Account();
  14. A.display();
  15. }
  16.  
  17. }
  18. class Account extends atma
  19. {
  20. String account;
  21. String name;
  22. String data;
  23. int leixing;
  24. String mima;
  25. double money;
  26. Account(){}
  27. Account(String account,String name,String data,String mima,double money)
  28. {
  29. this.account = account;
  30. this.name = name;
  31. this.data = data;
  32. this.mima = mima;
  33. this.money = money;
  34. }
  35. public String getMima()
  36. {
  37. return mima;
  38. }
  39.  
  40. public void Mune()
  41. {
  42. System.out.println("1.取款");
  43. System.out.println("2.存款");
  44. System.out.println("3.转账汇款");
  45. System.out.println("4.修改密码");
  46. System.out.println("5.查询余额");
  47. System.out.println("6.退卡");
  48. }
  49. public void QuKuan()
  50. {
  51. System.out.println("100元");
  52. System.out.println("500元");
  53. System.out.println("1000元");
  54. System.out.println("1500元");
  55. System.out.println("2000元");
  56. System.out.println("5000元");
  57. System.out.println("其他金额");
  58. System.out.println("返回");
  59. Scanner in = new Scanner(System.in);
  60. System.out.println("请输入取款金额:");
  61. int M = in.nextInt();
  62. if(M <= money)
  63. {
  64. System.out.println("正在取款请稍后。。。");
  65. money = money - M;
  66. System.out.println("取款成功!");
  67. }
  68. else
  69. {
  70. System.out.println("余额不足,取款失败!");
  71. }
  72. }
  73. public void CunKuan()
  74. {
  75. Scanner in = new Scanner(System.in);
  76. System.out.println("请输入存款金额:");
  77. int M = in.nextInt();
  78. money = money + M;
  79. System.out.println("存款成功!");
  80. }
  81. public void ZhuanZhang()
  82. {
  83. Scanner in = new Scanner(System.in);
  84. System.out.println("请输入转账行号:");
  85. String H = in.next();
  86. System.out.println("你要转账的人的姓名是否为xxx?0:是,1:否");
  87. int X=in.nextInt();
  88. if(X==0)
  89. {
  90. System.out.println("请输入转账金额:");
  91. int M = in.nextInt();
  92. if(money >= M)
  93. {
  94. System.out.println("转账成功!");
  95. money = money - M;
  96. }
  97. else
  98. {
  99. System.out.println("余额不足,转账失败!");
  100. }
  101. }
  102. if(X==1)
  103. {
  104. System.out.println("卡号错误!");
  105. }
  106. }
  107. public void updataMima(String str)
  108. {
  109. if(str.equals(mima))
  110. {
  111. System.out.println("新密码不得与旧密码重复!");
  112. }
  113. else
  114. {
  115. mima = str;
  116. System.out.println("修改成功!");
  117. }
  118. }
  119. public void showMoney()
  120. {
  121. System.out.println("您的账户余额为:"+money);
  122. }
  123. public void display()
  124. {
  125. Scanner in = new Scanner(System.in);
  126. Account[] a = new Account[100];
  127. a[0] = new Account("123456789101","ctt","2016/11/15","123456",1000);
  128. System.out.println( "请输入密码:" );
  129. String input = in.next();
  130. boolean flag = false;
  131. for(int i = 0;i<50;i++)
  132. {
  133. if(a[i].getMima().equals(input)&& a[i]!=null)
  134. flag = true;
  135. break;
  136. }
  137. int s1;
  138. if(flag)
  139. {
  140. boolean p = true;
  141. while(p)
  142. {
  143. Mune();
  144. System.out.println( "请输入要执行的操作:" );
  145. s1 = in.nextInt();
  146. if(s1 == 1)
  147. {
  148. QuKuan();
  149. continue;
  150. }
  151. if(s1 == 2)
  152. {
  153. CunKuan();
  154. continue;
  155. }
  156. if(s1 == 3)
  157. {
  158. ZhuanZhang();
  159. continue;
  160. }
  161. if(s1 == 4)
  162. {
  163. System.out.println("请输入新密码:");
  164. String str = in.next();
  165. updataMima(str);
  166. continue;
  167. }
  168. if(s1 == 5)
  169. {
  170. showMoney();
  171. continue;
  172. }
  173. else
  174. {
  175. p = false;
  176. System.out.println("已退出!");
  177. }
  178. }
  179. }
  180.  
  181. else
  182. {
  183. System.out.println("输入错误!");
  184. }
  185. }
  186. }

结果:

分析:利用抽象类实现。

Java(多态)动手动脑的更多相关文章

  1. Java之动手动脑(三)

    日期:2018.10.12 星期五 博客期:017 这次留了两个动手动脑作业!我需要一个一个来说!先说第一个吧! Part 1 :随机生成1000个随机数 代码: //以下为 RandomMaker. ...

  2. java的动手动脑10月20日

    (1)动手动脑 该函数没有赋初值再就是如果类提供一个自定义的构造方法,将导致系统不在提供默认的构造方法. (2) public class test { /*** @param args*/publi ...

  3. Java的动手动脑

    动手动脑及课后实 仔细阅读示例: EnumTest.java,运行它,分析运行结果? public class EnumTest { public static void main(String[] ...

  4. java异常处理动手动脑问题解决和课后总结

    动手动脑 一.问题:请阅读并运行AboutException.java示例,然后通过后面的几页PPT了解Java中实现异常处理的基础知识. 1.源代码 import javax.swing.*; cl ...

  5. java课java方法动手动脑

    动手动脑: import java.util.Scanner; public class Random { public static void main(String[] args) {       ...

  6. java课堂动手动脑及课后实验总结

      动手动脑一:枚举   输出结果: false false true SMALL MEDIUM LARGE 分析和总结用法 枚举类型的使用是借助ENUM这样一个类,这个类是JAVA枚举类型的公共基本 ...

  7. Java课堂 动手动脑6

    一.下列语句哪一个将引起编译错误?为什么?哪一个会引起运行时错误?为什么? m=d;d=m;d=(Dog)m;d=c;c=(Cat)m; 先进行自我判断, 1.代码: class Mammal{} c ...

  8. Java一些动手动脑实验

    一.Java字段初始化的规律: 输出结果为:100 和 300 当把{filed=200}放在public int field=100之后输出结果为:200 和 300 所以执行类成员定义时指定的默认 ...

  9. Java的动手动脑(七)

    日期:2018.11.18 博客期:025 星期日 Part 1:使用 Files.walkFileTree()来找出指定文件夹下大小大于1KB的文件 package temp; import jav ...

  10. Java的动手动脑(六)

    日期:2018.11.8 星期四 博客期:022 --------------------------------------------------------------------------- ...

随机推荐

  1. 《疯狂Java讲义》(二)---- Java程序的运行机制和JVM

    1. 运行机制 Java源文件(*.java)-----使用javac编译----编译成*.class文件----使用java解释执行----特定平台的机器码 2. 原理 负责解释执行字节码文件的就是 ...

  2. 显示全部select change 异常

    异常信息(异常类型:Genersoft.Platform.Core.Error.GSPException)异常提示:调用方法SelectChange发生异常,详细请看内部异常信息!异常信息:调用方法S ...

  3. leetcode6:Zigzag Conversion@Python

    The string "PAYPALISHIRING" is written in a zigzag pattern on a given number of rows like ...

  4. MAXIMO-数据库配置属性数据类型解释

    ALN:       字母数字字符,混合大小写,最大长度取决于数据库     Oracle = 4000 个字符     Sql Server = 8000 个字符     DB2 = 32672 个 ...

  5. 美国安全公司HBGary——国家授命的黑客

         入侵电脑,窃听用户,假身份上网——美国安全公司HBGary是电脑防护和间谍软件的供应商.而其客户中就有美国的国家安全机构.现在,该公司被偷的电子邮件可以让我们对其数字化战争中的业务做一个初步 ...

  6. 动态组合lambda 表达式

    //记录实体集合—动态组合lambda 表达式 Expression<Func<AdEntity, bool>> thirdWhere = p => p.Observer ...

  7. mysql使用小技巧

    1.mySql 删除表中大批量的数据 假设有一个表(logs)有2000万条记录,我们要在业 务不停止的情况下删除其中status=1的所有记录,差不多有1800万条,直接执行 DELETE FROM ...

  8. ES5 的 forEach, map, filter, some, every 方法

    1:  forEacharray.forEach(callback,[ thisObject]) // 遍历数组里面的所有数字// item 是值, i 是序号, array 是整个数组 [1, 2 ...

  9. 记一次项目中的css样式复用

    本文同步至微信公众号:http://mp.weixin.qq.com/s?__biz=MzAxMzgwNDU3Mg==&mid=401616238&idx=1&sn=3c6e9 ...

  10. raw,cow,qcow,qcow2镜像的比较

    在linux下,虚拟机的选择方式有很多,比如vmware for linux,virtual box,还有qemu,在以前,使用qemu的人不多,主要是使用起来有些麻烦,但现在随着Openstack的 ...