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个数 ...
随机推荐
- Jenkins与RocketChat集成
Jenkins与RocketChat集成 在Jenkins中安装插件RocketChat Notifier 配置信息 点击Jenkins左侧的系统管理-->系统设置, 找到Global Rock ...
- Spring Boot 整合 Freemarker,50 多行配置是怎么省略掉的?
Spring Boot2 系列教程接近完工,最近进入修修补补阶段.Freemarker 整合貌似还没和大家聊过,因此今天把这个补充上. 已经完工的 Spring Boot2 教程,大家可以参考这里: ...
- springboot+redis+Interceptor+自定义annotation实现接口自动幂等
前言: 在实际的开发项目中,一个对外暴露的接口往往会面临很多次请求,我们来解释一下幂等的概念:任意多次执行所产生的影响均与一次执行的影响相同.按照这个含义,最终的含义就是 对数据库的影响只能是一次性的 ...
- 跟着大彬读源码 - Redis 2 - 服务器如何响应客户端请求?(上)
上次我们通过问题"启动服务器,程序都干了什么?",跟着源码,深入了解了 Redis 服务器的启动过程. 既然启动了 Redis 服务器,那我们就要连上 Redis 服务干些事情.这 ...
- BZOJ 1026:windy数(数位DP)
http://www.lydsy.com/JudgeOnline/problem.php?id=1026 1026: [SCOI2009]windy数 Time Limit: 1 Sec Memor ...
- c# bool类型和int类型的互转
项目过程中,会有model的一些属性字段为‘是’或‘否’ 数据库字段一半定义为int,值则是0或1 数据库model转实体类的时候,bool和int可以直接相互转换 false强转int 值就是0 t ...
- 西门子PLC中各个组织块OB作用(OB1、OB100……)
1.自由循环组织块OB1 S7 CPU启动完成后,操作系统循环执行OB1,OB1执行完成后,操作系统再次启动OB1.在OB1中可以调用FB.SFB.FC.SFC等用户程序使其循环执行.除OB90以外 ...
- MLlib特征变换方法
Spark1.6.2.2.3 PCA 算法介绍: 主成分分析是一种统计学方法,它使用正交转换从一系列可能相关的变量中提取线性无关变量集,提取出的变量集中的元素称为主成分.使用PCA方法可以对变量集合进 ...
- 个人永久性免费-Excel催化剂功能第27波-Excel工作表设置快捷操作
Excel催化剂在完善了数据分析场景的插件需求后,决定再补充一些日常绝大多数Excel用户同样可以使用到的小功能,欢迎小白入场,在不违背太多Excel最佳实践的前提下,Excel催化剂乐意为广大Exc ...
- 个人永久性免费-Excel催化剂功能第16波-N多使用场景的多维表转一维表
Excel表的多维表数据结构转换为一维表的数据结构,以供更进一步对数据进行加工整理,生成另外格式的汇总表,这是Excel数据处理的一大刚需,几乎每个Excel表哥.表姐都会遇到这样的使用场景.很可惜, ...
