Java课堂 动手动脑6
一.下列语句哪一个将引起编译错误?为什么?哪一个会引起运行时错误?为什么?
m=d;d=m;d=(Dog)m;d=c;c=(Cat)m;
先进行自我判断,
1、代码:
class Mammal{}
class Dog extends Mammal {}
class Cat extends Mammal{}
public class TestCast
{
public static void main(String args[])
{
Mammal m;
Dog d=new Dog();
Cat c=new Cat();
//m=c;c=(Cat)m;
//d=m;错误
m=d;
d=(Dog)m;
//d=c;错误的
}
}
2判断在代码里。
3、总结:子类能赋给父类,改变父类的方法,但不改变父类中的变量。父类赋值给子类,需要确定是给的那个子类,否则会出错。
二.运行以下测试代码
public class ParentChildTest {
public static void main(String[] args) {
Parent parent=new Parent();
parent.printValue();
Child child=new Child();
child.printValue();
parent=child;
parent.printValue();
parent.myValue++;
parent.printValue();
((Child)parent).myValue++;
parent.printValue();
}
}
class Parent{
public int myValue=;
public void printValue() {
System.out.println("Parent.printValue(),myValue="+myValue);
}
}
class Child extends Parent{
public int myValue=;
public void printValue() {
System.out.println("Child.printValue(),myValue="+myValue);
}
}

结论:子类能覆盖父类,但是父类中的变量的值是不改变的,访问父类中的变量时可用super来访问,反之则一直被子类覆盖。父类被覆盖时,对父类中的变量进行操作时,父类中的变量改变,但输出时仍输出覆盖父类的子类的变量。可以对父类操作前强制转化为对子类的操作,即(child)Parent.myValue++,这时改变的将是覆盖父类的子类。
三、ATM
import java.util.Scanner;
class Account
{
private String code =null; //信用卡号
protected String key=null; //客户密码
protected double money =0.0; //卡里金额
public Account(String code,String key,double money)
{
this.code=code;
this.key=key;
this.money=money;
}
String get_Code() {
return code;
}
String get_Key() {
return key;
}
double get_Money() {
return money;
}
void set_Balance(double mon) {
money -= mon;
}
}
class make extends Account
{
public make(String code,String key,double money) {
super(code,key,money);
}
void Welcome()
{
Scanner a=new Scanner(System.in);
System.out.println("你已进入,请输入密码");
String key1=a.next();
System.out.println(key);
if(key1.equals(key))
{
System.out.println("密码正确,您已进入\n");
}
else
{
System.out.println("您的密码错误,系统已退出!");
System.exit();
} }
void cunkuan()
{
Scanner a=new Scanner(System.in);
System.out.println("请输入存款金额");
double money1=a.nextDouble();
this.money=money+money1;
System.out.println("您以成功为你的账户存款"+this.money);
}
void qukuan()
{
Scanner a=new Scanner(System.in);
System.out.println("取款选项\n100\n200\n500\n1000\n1500\n2000\n5000\n其他金额\n退卡\n");
System.out.println("请输入您需要的取款选项:");
String aa=a.next();
if(aa.equals(""))
{
this.money=money-;
System.out.println("您以成功取款"++"请在取钱口取走你大现金。");
}
if(aa.equals(""))
{
this.money=money-;
System.out.println("您以成功取款"++"请在取钱口取走你大现金。");
}
if(aa.equals(""))
{
this.money=money-;
System.out.println("您以成功取款"++"请在取钱口取走你大现金。");
}
if(aa.equals(""))
{
this.money=money-;
System.out.println("您以成功取款"++"请在取钱口取走你大现金。");
}
if(aa.equals(""))
{
this.money=money-;
System.out.println("您以成功取款"++"请在取钱口取走你大现金。");
}
if(aa.equals(""))
{
this.money=money-;
System.out.println("您以成功取款"++"请在取钱口取走你大现金。");
}
if(aa.equals(""))
{
this.money=money-;
System.out.println("您以成功取款"++"请在取钱口取走你大现金。");
}
if(aa.equals("其他金额"))
{
System.out.println("请输入取款金额:");
double r=a.nextDouble();
this.money=money-r;
System.out.println("您以成功取款"+r+"请在取钱口取走你大现金。");
}
if(aa.equals("退卡"))
{
System.out.println("请取走您的卡!");
System.exit();
}
else
{
System.out.println("请取走您的卡!");
System.exit();
}
}
void zhuanZhang()
{
System.out.println("请输入转账金额");
Scanner a=new Scanner(System.in);
int aa=a.nextInt();
if(aa<)
{
this.money=money-aa;
System.out.println("转账操作成功!");
}
else{System.out.println("余额不足,转账失败!");}
}
void caidan()
{
System.out.println("【存款---1】");
System.out.println("【取款---2】");
System.out.println("【余额---5】");
System.out.println("【转账---3】");
System.out.println("【退卡---4】");
System.out.println("---------");
System.out.println("请输入你的操作:");
System.out.println("请选择你需要的服务:");
Scanner a=new Scanner(System.in);
int num=a.nextInt();
switch(num) {
case : cunkuan(); break;
case : qukuan(); break;
case : zhuanZhang(); break;
case : System.exit(); System.out.println("系统已退出!请取走您的卡!"); break;
}
}
}
public class ATM {
public static void main(String[] args) {
make peo=new make("","",);
peo.Welcome();
peo.caidan();
}
}

总结:此程序于学生信息管理相似。改成多态不是很困难,通过查阅资料和我的努力暂时就做到了这里,而且编写这样的程序使我对多态有了进一步的了解,所以我一定会做完它的。
Java课堂 动手动脑6的更多相关文章
- java课堂动手动脑及课后实验总结
动手动脑一:枚举 输出结果: false false true SMALL MEDIUM LARGE 分析和总结用法 枚举类型的使用是借助ENUM这样一个类,这个类是JAVA枚举类型的公共基本 ...
- java课堂动手动脑总结
java有8种基本数据类型:byte,int,short,long,boolean,char,float,double. 对应的为:Byte,Int,Short,Long,Boolean,Charec ...
- JAVA课堂动手动脑实验--方法的重载定义,组合数的递归算法
1. 请看以下代码,你发现了有什么特殊之处吗? 答:此程序中的两个方法虽然方法名一样,但是参数的数据类型不同: 这是方法的重载,方法的重载需要满足的条件: 1)方法名相同: 2)参数类型不同,参数个数 ...
- Java课堂 动手动脑5
1.了解棋盘打印:利用二维数组输出一个15*15的棋盘,棋盘的原素为“+”,就是输出一个横纵都是15个“+”的二维数组,然后再以坐标形式输入棋子“●”,替换掉原来棋盘里的“+”.再编写代码. 电脑随机 ...
- java课堂 动手动脑3
(1) 该函数没有赋初值再就是如果类提供一个自定义的构造方法,将导致系统不在提供默认的构造方法. (2) public class test { public static void main(Str ...
- JAVA课堂-动手动脑1
一.Enum:一般用来表示一组相同类型的常量.对这些属性用常量的好处是显而易见的,不仅可以保证单例,且比较时候可以用”==”来替换equals,枚举对象里面的值都必须是唯一的. 代码: public ...
- Java课堂动手动脑
1.使用Files. walkFileTree()找出指定文件夹下所有大于指定大小(比如1M)的文件: 代码: package test; import java.io.IOException; im ...
- java课堂动手动脑博客
随机生成10个数,填充一个数组,然后用消息框显示数组内容,接着计算数组元素的和,将结果也显示在消息框中. 要求将设计思路.程序流程图.源程序代码.结果截图.编程总结等发表到博客园. (截止时间2015 ...
- java课堂 动手动脑2
1.编写一个方法,使用以上算法生成指定数目(比如1000个)的随机整数 Modulus=231-1=int.MaxValue, Multiplier=75=16807. C=0 当显示过231-2个数 ...
随机推荐
- Failed to start Docker Application Container Engine.
[root@dockertest ~]# systemctl status docker.service● docker.service - Docker Application Container ...
- 跟我学SpringCloud | 第七篇:Spring Cloud Config 配置中心高可用和refresh
SpringCloud系列教程 | 第七篇:Spring Cloud Config 配置中心高可用和refresh Springboot: 2.1.6.RELEASE SpringCloud: Gre ...
- Ceph原理动画演示
动图生动刻画Ceph的基本原理之集群搭建及数据写入流程:)
- kuangbin专题 专题一 简单搜索 非常可乐 HDU - 1495
题目链接:https://vjudge.net/problem/HDU-1495 题意:有两个空杯(分别是N升和M升)和一罐满的可乐S升,S = N + M,三个容器可以互相倾倒,如果A倒入B,只有两 ...
- kuangbin专题 专题一 简单搜索 Pots POJ - 3414
题目链接:https://vjudge.net/problem/POJ-3414 题意:给你两个杯子,分别容量为A(1),B(2)和一个C,C是需要经过下列操作,得到的一个升数.(1) FILL(i) ...
- webpack-dev-server 小记 原理介绍 概念解读
使用 DevServer 提供 HTTP 服务而不是使用本地文件预览 监听文件的变化并自动刷新网页,做到实时预览 支持 Source Map,以方便调试 对于这些,Webpack 都为我们考虑好了.W ...
- NOIP2015斗地主题解 7.30考试
问题 B: NOIP2015 斗地主 时间限制: 3 Sec 内存限制: 1024 MB 题目描述 牛牛最近迷上了一种叫斗地主的扑克游戏.斗地主是一种使用黑桃.红心.梅花.方片的A到K加上大小王的共 ...
- windows开机自启python服务(任务计划程序+bat脚本)
需求:根据上海某银行 的需求,使用到获取数据服务的软件 只能在windows上运行,所以有 windows系统开机用户登录后自启动python flask服务 的需求: 相关工具:win10系统中,使 ...
- WinForm控件之【ComboBox】
基本介绍 下拉文本框应用较为广泛,在winfrom控件当中使用设置也是相对的简单,主要用于存在多种选择的单选操作场景. 常设置属性.事件 DataSource:绑定加载项的数据源,设置属性Displa ...
- NET多线程之进程间同步锁Mutex
Mutex类似于lock.Monitor,都是为了解决多线程环境下,资源竞争导致的访问顺序问题.常见资源竞争有以下情况: 1.单例,如何确保单例: 2.IO文件操作,如果同时又多个线程访问同一个文件会 ...
