• 08课堂问题整理


    作业归档8 多态

    1、运行下列测试代码:

    package demo;

    public class TestInstanceof

    {

    public static void main(String[] args)

    {

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

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

    Object hello = "Hello";

    //StringObject类的子类,所以返回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++;使得父类的属性加1100+1),parent.printValue();将与上一个调用相同,调用的是子类的方法与属性。之后,((Child)parent).myValue++;将父类的对象强制转化为子类的对象,并将属性加1200+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("请输入取款的金额:11002500310004150052000650007、其他");

    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

     

     

  • 相关阅读:
    关于左边图片右边列表的新闻布局模式
    Yahoo!团队实践分享:网站性能优化的34条黄金守则(三)—JavaScript和CSS
    Yahoo!团队实践分享:网站性能优化的34条黄金守则(二)—服务器
    浅谈HTTP中Get与Post的区别
    司徒大人的面试题,自勉~
    善待PSD — 好设计师,从细节做起
    Yahoo!团队实践分享:网站性能优化的34条黄金守则(一)—内容
    恕我简陋,恕我臃肿
    【svg+vml】部分尝试
    记录:关于Drag&Drop Upload
  • 原文地址:https://www.cnblogs.com/hjy415/p/6078991.html
Copyright © 2020-2023  润新知