08课堂问题整理

作业归档8 多态

1、运行下列测试代码:

package demo;

public class TestInstanceof

{

public static void main(String[] args)

{

//声明hello时使用Object类,则hello的编译类型是Object,Object是所有类的父类

//但hello变量的实际类型是String

Object hello = "Hello";

//String是Object类的子类,所以返回true。

System.out.println("字符串是否是Object类的实例:" + (hello instanceof Object));

//返回true。

System.out.println("字符串是否是String类的实例:" + (hello instanceof String));

//返回false。

System.out.println("字符串是否是Math类的实例:" + (hello instanceof Math));

//String实现了Comparable接口,所以返回true。

System.out.println("字符串是否是Comparable接口的实例:" + (hello instanceof Comparable));

String a = "Hello";

//String类既不是Math类,也不是Math类的父类,所以下面代码编译无法通过

//System.out.println("字符串是否是Math类的实例:" + (a instanceof Math));

}

}

运行结果:

字符串是否是Object类的实例:true

字符串是否是String类的实例:true

字符串是否是Math类的实例:false

字符串是否是Comparable接口的实例:true

总结:可以使用instanceof运算符判断一个对象是否可以转换为指定的类型。

2、运行下列测试代码:

package demo;

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=d;

//d=m;

d=(Dog)m;

//d=c;

//c=(Cat)m;

}

}

分析:

第一个注释掉的代码错误:Type mismatch: cannot convert from Mammal to Dog。

第二个注释掉的代码错误:Type mismatch: cannot convert from Cat to Dog。

第三个注释掉的代码错误:没有编译错误,但是无法运行。

3、运行下列测试代码:

package demo;

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=100;

public void printValue() {

System.out.println("Parent.printValue(),myValue="+myValue);

}

}

class Child extends Parent{

public int myValue=200;

public void printValue() {

System.out.println("Child.printValue(),myValue="+myValue);

}

}

①程序运行结果是什么?

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

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

答:①运行结果:

Parent.printValue(),myValue=100

Child.printValue(),myValue=200

Child.printValue(),myValue=200

Child.printValue(),myValue=200

Child.printValue(),myValue=201

②第一个,调用的是父类的方法,父类的属性。第二个,调用的是子类的方法与属性。然后,parent=child;后,parent.printValue()调用的将是子类的方法与属性。parent.myValue++;使得父类的属性加1(100+1),parent.printValue();将与上一个调用相同,调用的是子类的方法与属性。之后,((Child)parent).myValue++;将父类的对象强制转化为子类的对象,并将属性加1(200+1),parent.printValue();就会调用子类的方法属性。

③当子类与父类的方法一样时,并让父类对象引用子类对象时,调用哪个方法,对象的“真实”类型决定。如果子类与父类的字段相同,那么子类中的字段会代替或隐藏父类的字段,子类方法中访问的是子类中的字段。如果子类方法想访问父类中被隐藏的字段,需用关键字super来访问。如果子类被当作父类使用,则通过子类访问的字段是父类的。

4、运行下列测试代码:

package demo;

class Parent2

{

public int value=100;

public void Introduce()

{

System.out.println("I‘m father");

}

}

class Son extends Parent2

{

public int value=101;

public void Introduce()

{

System.out.println("I‘m son");

}

}

class Daughter extends Parent2

{

public int value=102;

public void Introduce()

{

System.out.println("I‘m daughter");

}

}

public class TestPolymorphism

{

public static void main(String args[])

{

Parent2 p=new Parent2();

p.Introduce();

System.out.println(p.value);

p=new Son();

p.Introduce();

System.out.println(p.value);

p=new Daughter();

p.Introduce();

System.out.println(p.value);

}

}

运行结果:

I‘m father

100

I‘m son

100

I‘m daughter

100

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

package demo;

import java.util.Scanner;

public class TestATM {

public static void main(String []args){

Account user=new Account("Marry","2016.11.15",1,"123456",500);

Scanner cin=new Scanner(System.in);

int choose;

while(true){

menu();

choose=cin.nextInt();

user.setType(choose);

if(choose==1){

user.saveMoney();

}

if(choose==2){

user.drawMoney();

}

if(choose==3){

user.zhuanMoney();

}

if(choose==4){

user.updateMima();

}

if(choose==5){

user.chaxun();

}

if(choose==6){

break;

}

}

}

public static void menu(){

System.out.println("1、存款");

System.out.println("2、取款");

System.out.println("3、转账汇款");

System.out.println("4、修改密码");

System.out.println("5、查询余额");

System.out.println("6、退卡");

System.out.println("请选择:");

}

}

abstract class ATM{

abstract public void saveMoney();

abstract public void drawMoney();

abstract public void zhuanMoney();

abstract public void updateMima();

abstract public void chaxun();

}

class Account extends ATM{

private String name;//用户名

private String date;

private int type;

private String mima;//密码

private double money;

public Account(String na,String da,int ty,String mi,double mo){

name=na;

date=da;

type=ty;

mi=mima;

money=mo;

}

//set函数

public void setName(String na){

name=na;

}

public void setDate(String da){

date=da;

}

public void setType(int ty){

type=ty;

}

public void setMima(String mi){

mima=mi;

}

public void setMoney(double mo){

money=mo;

}

//get函数

public String getName(){

return name;

}

public String getDate(){

return date;

}

public int getType(){

return type;

}

public String getMima(){

return mima;

}

public double getMoney(){

return money;

}

//存款

public void saveMoney(){

Scanner cin1=new Scanner(System.in);

System.out.print("请输入存款的金额:");

double qian=cin1.nextDouble();

money+=qian;

System.out.println("存款成功,当前余额为:"+money);

}

//取款

public void drawMoney(){

Scanner cin2=new Scanner(System.in);

Scanner cin22=new Scanner(System.in);

System.out.print("请输入取款的金额:1、100。2、500。3、1000。4、1500。5、2000。6、5000。7、其他");

int xuan=cin22.nextInt();

if(xuan==1){

if(money>=100){

money-=100;

System.out.println("取款成功,当前余额为:"+money);

}

else

System.out.println("抱歉,您的余额不足100元。");

}

if(xuan==2){

if(money>=500){

money-=500;

System.out.println("取款成功,当前余额为:"+money);

}

else

System.out.println("抱歉,您的余额不足500元。");

}

if(xuan==3){

if(money>=1000){

money-=1000;

System.out.println("取款成功,当前余额为:"+money);

}

else

System.out.println("抱歉,您的余额不足1000元。");

}

if(xuan==4){

if(money>=1500){

money-=1500;

System.out.println("取款成功,当前余额为:"+money);

}

else

System.out.println("抱歉,您的余额不足1500元。");

}

if(xuan==5){

if(money>=2000){

money-=2000;

System.out.println("取款成功,当前余额为:"+money);

}

else

System.out.println("抱歉,您的余额不足2000元。");

}

if(xuan==6){

if(money>=5000){

money-=5000;

System.out.println("取款成功,当前余额为:"+money);

}

else

System.out.println("抱歉,您的余额不足5000元。");

}

if(xuan==7){

double qian=cin2.nextDouble();

if(money<qian)

System.out.println("抱歉,您的余额不足"+qian+"元。");

else

money-=qian;

System.out.println("取款成功,当前余额为:"+money);

}

}

//转账汇款

public void zhuanMoney(){

Scanner cin3=new Scanner(System.in);

Scanner input=new Scanner(System.in);

System.out.println("请输入对方账户:");

String toUser=input.nextLine();

System.out.print("请输入转账的金额:");

double qian=cin3.nextDouble();

if(money<qian)

System.out.println("抱歉,您的余额不足"+qian+"元。");

else

money-=qian;

System.out.println("转账成功,当前余额为:"+money);

}

//

public void updateMima(){

Scanner sc=new Scanner(System.in);

//System.out.print("请输入原密码:");

//String oldMima = sc.nextLine();

// if(mima.equals(oldMima))

//{

System.out.println("请输入新密码:");

String newMima1 = sc.nextLine();

System.out.println("请再次输入新密码:");

String newMima2 = sc.nextLine();

if(newMima1.equals(newMima2)){

mima=newMima1;

System.out.println("修改密码成功");

}

else

System.out.println("两次新密码不一致,修改密码失败");

// }

//else{

//System.out.println("原密码不正确,修改密码失败!");

// }

}

public void chaxun(){

System.out.println("您当前余额为:"+money);

}

}

运行结果:

1、存款

2、取款

3、转账汇款

4、修改密码

5、查询余额

6、退卡

请选择:

1

请输入存款的金额:5000

存款成功,当前余额为:5500.0

1、存款

2、取款

3、转账汇款

4、修改密码

5、查询余额

6、退卡

请选择:

2

请输入取款的金额:1、100。2、500。3、1000。4、1500。5、2000。6、5000。7、其他4

取款成功,当前余额为:4000.0

1、存款

2、取款

3、转账汇款

4、修改密码

5、查询余额

6、退卡

请选择:

3

请输入对方账户:

5968515154

请输入转账的金额:200

转账成功,当前余额为:3800.0

1、存款

2、取款

3、转账汇款

4、修改密码

5、查询余额

6、退卡

请选择:

4

请输入新密码:

569412

请再次输入新密码:

569412

修改密码成功

1、存款

2、取款

3、转账汇款

4、修改密码

5、查询余额

6、退卡

请选择:

5

您当前余额为:3800.0

1、存款

2、取款

3、转账汇款

4、修改密码

5、查询余额

6、退卡

请选择:

6

 

时间: 2024-12-26 11:39:15

08课堂问题整理的相关文章

04课堂问题整理

04课堂问题整理 1.请依据代码的输出结果,自行总结Java字段初始化的规律. public class InitializeBlockDemo { public static void main(String[] args) { InitializeBlockClass obj=new InitializeBlockClass(); System.out.println(obj.field); obj=new InitializeBlockClass(300); System.out.prin

2019.08.07学习整理

2019.08.07学习整理 字符编码 1.什么是字符编码 字符编码是将人类的字符编码成计算机能识别的数字,这种转换必须遵循一套固定的标准,该标准无非是人类字符与数字的对应关系,称之为字符编码表. 2.字符编码发展史与分类 计算机由美国人发明,最早的字符编码为ASCII,只规定了英文字母数字和一些特殊字符与数字的对应关系.最多只能用 8 位来表示(一个字节),即:2**8 = 256,所以,ASCII码最多只能表示 256 个符号. 当然我们编程语言都用英文没问题,ASCII够用,但是在处理数据

2019.08.27学习整理

2019.08.27学习整理 什么是继承 是一种新建类的方式,继承了一个类,类中的属性和方法就在子类中 父类/基类 子类/派生类 新式类:只要继承了object类,就是新式类,在python3中,默认继承object类 -Python3中:默认继承object class A: pass -python2中,需要显示的指定继承object --经典类:没有继承object的类,就是经典类 -python3中没有经典类 -python2中才有 利用继承减少代码冗余 #继承重用父类方法方式一:指名道

2019.08.29学习整理

2019.08.29学习整理 绑定方法与非绑定方法 绑定方法 对象绑定方法 类的绑定方法 绑定方法:特殊之处,绑定给谁就是谁来调,并且会把自身调过来 类的绑定方法 绑定给类,类来调用,会把类自身传过来 类的绑定方法用在什么地方 不需要通过对象,只需要通过类就能获取到一些东西的时候,用类的绑定方法 类的绑定方法,可以由对象来调 class Person: ''' 注释的内容 ''' def __init__(self,name,age): # print(self) self.name=name

1109课堂内容整理

选择列表菜单, 应该多注意一下列表, 菜单的选择, 一个不能选择size, 另一个可以, 一个是多行输入文本的样式, 一个是下拉列表 代表多选, multiple="MULTIPLE" 在网页中嵌入一个新的网页<iframe height="300" width="500" src="Untitled-2.html">Untitled-2</iframe> <frameset></fr

字符串及课堂例子整理

编程思路:通过参数传入要加密的字符.凯撒密码器只是通过移动的位数,这里不妨通过命令行参数传入.由于移动的位数为整数,因此使用Integer.parseInt( )方法进行了转换.由于字母表中共26个字符,所以移位前先将移动的位数(key)和26取模.由于Java中字符和整型可自动转换,因此将字符加上一个正整数即代表在字母表中右移多少位.如果移动的位数是负值,则代表在字母表中左移多少位.就得出来了. 编程流程图 : 加密方法: 实验代码: import java.util.Scanner; pub

8086汇编——课堂笔记整理5

JMP(无条件跳转) JMP SHORT OPR(段内跳转)(1byte)(+127~-128) JMP OPR(near jump)(2byte) JMP FAR PTR OPR(段间)(FAR类型,PTR强制类型转换) 标签内: 跳转结束 JMP DONE e.g.1 A word array named ARRAY,N elements,the number of positive  in  DI register,the number of 0 in SI register,the nu

接口与继承课堂例子整理

public class ke { /** * @param args */ public static void main(String[] args) { System.out.println(new A()); } } class A{} [email protected]类的主类

03课堂问题整理

1.分析以下代码,方法square的定义写了static,如果去掉static,就会报错,为什么呢? public class SquareIntTest { public static void main(String[] args) { int result; for (int x = 1; x <= 10; x++) { result = square(x); System.out.println("The square of " + x + " is "