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

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. Requests方法 -- cookie绕过验证码登录操作

    前言有些登录的接口会有验证码:短信验证码,图形验证码等,这种登录的话验证码参数可以从后台获取的(或者查数据库最直接).获取不到也没关系,可以通过添加 cookie 的方式绕过验证码. 1.这里以登录博 ...

  2. Smobiler控件的使用:ListView的数据绑定及实现多选

    环境 SmobilerDesigner 4.7 Visual Studio 2010以上 正文 listview绑定数据 打开Visual Studio ,新建一个SmobilerApplicatio ...

  3. Python Day_2

    入门任何一门编程语言,前面总是离不开变量,字符串这些概念,而且这些东西在往后的日子里,有着至关重要的存在.因为不管我们写什么程序,都要用到变量以及字符串. 变量 首先,我们的变量在定义的时候,是不需要 ...

  4. C++学习书籍推荐《Effective C++ 第三版(英文)》下载

    百度云及其他网盘下载地址:点我 作者简介 Scott Meyers is one of the world's foremost authorities on C++, providing train ...

  5. 1. 在Mac OS中配置CMake的详细图文教程

    CMake是一个比make更高级的跨平台的安装.编译.配置工具,可以用简单的语句来描述所有平台的安装(编译过程).并根据不同平台.不同的编译器,生成相应的Makefile或者project文件.本文主 ...

  6. centos 上安装redis 3.0.5

    官网下载安装包,直接使用make编译,报如下错误 : [root@localhost redis-3.0.5]# make cd src && make all make[1]: 进入 ...

  7. Skyline WEB端开发5——添加标签后移动

    针对于标签或者模型,在skyline上可以进行移动.可以让一个模型可以像无人机似的飞行,或者描述从一个点到另一个点的飞行轨迹. 话不多说,直接上干货. 第一步 添加标签 参考网址:https://ww ...

  8. Netty-Channel架构体系源码解读

    全文围绕下图,Netty-Channel的简化版架构体系图展开,从顶层Channel接口开始入手,往下递进,闲言少叙,直接开撸 概述: 从图中可以看到,从顶级接口Channel开始,在接口中定义了一套 ...

  9. nu.xom:Serializer

    Serializer: 机翻 /* 使用用于控制空格,规范化,缩进,换行和基本URI的各种选项以特定编码输出Document对象 */ Serializer(OutputStream out) :创建 ...

  10. 【NOIP2018】标题统计-C++

    描述 凯凯刚写了一篇美妙的作文,请问这篇作文的标题中有多少个字符? 注意:标题中可能包含大.小写英文字母.数字字符.空格和换行符.统计标题字符数时,空格和换行符不计算在内. 输入 输入文件名为 tit ...