一.下列语句哪一个将引起编译错误?为什么?哪一个会引起运行时错误?为什么?

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的更多相关文章

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

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

  2. java课堂动手动脑总结

    java有8种基本数据类型:byte,int,short,long,boolean,char,float,double. 对应的为:Byte,Int,Short,Long,Boolean,Charec ...

  3. JAVA课堂动手动脑实验--方法的重载定义,组合数的递归算法

    1. 请看以下代码,你发现了有什么特殊之处吗? 答:此程序中的两个方法虽然方法名一样,但是参数的数据类型不同: 这是方法的重载,方法的重载需要满足的条件: 1)方法名相同: 2)参数类型不同,参数个数 ...

  4. Java课堂 动手动脑5

    1.了解棋盘打印:利用二维数组输出一个15*15的棋盘,棋盘的原素为“+”,就是输出一个横纵都是15个“+”的二维数组,然后再以坐标形式输入棋子“●”,替换掉原来棋盘里的“+”.再编写代码. 电脑随机 ...

  5. java课堂 动手动脑3

    (1) 该函数没有赋初值再就是如果类提供一个自定义的构造方法,将导致系统不在提供默认的构造方法. (2) public class test { public static void main(Str ...

  6. JAVA课堂-动手动脑1

    一.Enum:一般用来表示一组相同类型的常量.对这些属性用常量的好处是显而易见的,不仅可以保证单例,且比较时候可以用”==”来替换equals,枚举对象里面的值都必须是唯一的. 代码: public  ...

  7. Java课堂动手动脑

    1.使用Files. walkFileTree()找出指定文件夹下所有大于指定大小(比如1M)的文件: 代码: package test; import java.io.IOException; im ...

  8. java课堂动手动脑博客

    随机生成10个数,填充一个数组,然后用消息框显示数组内容,接着计算数组元素的和,将结果也显示在消息框中. 要求将设计思路.程序流程图.源程序代码.结果截图.编程总结等发表到博客园. (截止时间2015 ...

  9. java课堂 动手动脑2

    1.编写一个方法,使用以上算法生成指定数目(比如1000个)的随机整数 Modulus=231-1=int.MaxValue, Multiplier=75=16807. C=0 当显示过231-2个数 ...

随机推荐

  1. Linux 中 IDEA 不能调试(Debug)项目

    问题描述: can't debug project on idea linux. 在Linux 中, IDEA能运行项目,但是点击调试项目,弹出警告.警告内容如下: Required connecto ...

  2. 蓝桥杯:最大的算式(爆搜 || DP)

    http://lx.lanqiao.cn/problem.page?gpid=T294 题意:中文题意. 思路:1.一开始想的是,乘号就相当于隔板,把隔板插入到序列当中,同一个隔板的就是使用加法运算, ...

  3. Linux命令学习-wget命令

    Linux系统中的wget是一个下载文件的工具,它用在命令行下,通过它可以方便的下载文件. 我们以百度的logo图片链接地址为例:https://www.baidu.com/img/bd_logo.p ...

  4. 学Redis这篇就够了

    Redis 简介 Redis 优势 Redis 数据类型 string hash list set Zset 小总结 基本命令 发布订阅 简介 实例 发布订阅常用命令 事务 实例 Redis 事务命令 ...

  5. IIS配置应用时,请求Header或Cookie过长

    可以在注册表中配置IIS MaxFieldLength MaxRequestBytes 注意配置后需重启http服务于iis服务 net stop http net start http iisres ...

  6. Windows下必备的开发神器之Cmder使用说明

    诚言,对于开发码字者,Mac和Linux果断要比Windows更贴心;但只要折腾下,Windows下也是有不少利器的.之前就有在Windows下效率必备软件一文中对此做了下记载:其虽没oh-my-zs ...

  7. Spring MVC源码(三) ----- @RequestBody和@ResponseBody原理解析

    概述 在SpringMVC的使用时,往往会用到@RequestBody和@ResponseBody两个注解,尤其是处理ajax请求必然要使用@ResponseBody注解.这两个注解对应着Contro ...

  8. C#开发中常用的加密算法总结

    相信很多人在开发过程中经常会遇到需要对一些重要的信息进行加密处理,今天给大家分享我个人总结的一些加密算法: 常见的加密方式分为可逆和不可逆两种方式 可逆:RSA,AES,DES等 不可逆:常见的MD5 ...

  9. 【基本数据结构之堆】-C++

    注意:这篇博客讲的是手写堆,喜欢用C++自带数据结构模拟的慎入 今天我们来聊一聊一种奇怪 的数据结构: 堆 为什么说这个数据结构有点奇怪呢? 先看看其他的在我眼里是正常的数据结构: 队列(近似于排队) ...

  10. bootstrap table 父子表实现【无限级】菜单管理功能

    bootstrap table 父子表实现[无限级]菜单管理功能 实现效果 前端代码 <%@ page language="java" import="java.u ...