• 08-多态动手动脑及课后实践性问题总结


    一.类型转换知识:下列语句哪一个将引起编译错误?为什么?哪一个会引起运行时错误?为什么?

             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,不能将同等地位的类进行转换。

    二.运行以下测试代码:

    1.左边的程序运行结果什么?

    100 200 200 200 201

    2.总结:

      (1)当子类与父类拥有一样的方法,并且让一个父类变量引用一个子类对象时,到底调用哪个方法,由对象自己的”真实“类型所决定,也就是说:对象是子类型的,它就调用子类型的方法,是父亲型的,它就调用父类型的方法。

      (2)如果子类与父类有相同的字段,则子类中的字段会代替或隐藏父类的字段,子类方法中访问的是子类的字段(而不是父类中的字段)。如果子类方法确定想访问父类中被隐藏的同名字段,可以用super关键字来访问它。如果子类被当作父类使用,则通过子类访问的字段是父亲的!

    三.“多态小结”

    多态编程有两种主要形式:

    (1)继承多态:示例程序使用的方法

    (2)接口多态:使用接口代替抽象基类,这个任务留为作业

    import java.util.Vector;
     2 public class zoo4 {
     3     public static void main(String[] args) {
     4          Feeder f = new Feeder("小李");
     5          Vector<Animal> ans = new Vector<Animal>();
     6 
     7          //饲养员小李喂养一只狮子
     8          ans.add(new Lion());
     9          //饲养员小李喂养十只猴子
    10          for (int i = 0; i < 10; i++) {
    11              ans.add(new Monkey());
    12          }
    13          //饲养员小李喂养5只鸽子
    14          for (int i = 0; i < 5; i++) { 
    15              ans.add(new Pigeon());
    16          }
    17                 
    18          f.feedAnimals(ans);
    19    }
    20 }
    21 
    22 class Feeder {//饲养员类
    23     public String name;
    24     Feeder(String name) {
    25         this.name = name;
    26     }
    27     public void feedAnimals(Vector<Animal> ans) {
    28         for (Animal an : ans) {
    29             an.eat();
    30             }
    31         }
    32 }
    33 
    34 interface Animal {//动物基类
    35     public abstract void eat();
    36         }
    37 
    38 class Lion implements Animal {//狮子类
    39     public void eat() {
    40         System.out.println("我不吃肉谁敢吃肉!");
    41             }
    42 }
    43 
    44 class Monkey implements Animal {//猴子类
    45     public void eat() {
    46         System.out.println("我什么都吃,尤其喜欢香蕉。");
    47             }
    48 }
    49 
    50 class Pigeon implements Animal {
    51     public void eat() {
    52         System.out.println("我要减肥,所以每天只吃一点大米。");
    53         }
    54 }

    四.多态实现ATM

    import javax.swing.JOptionPane;
    import java.util.Scanner;
    
    class Account
    {
        String number;//十一个长度字符、数字的组合
        String name;
        String Date;
        int code;//六位数,可以用0开头
        double yue;
        public void set(String nu,String na,int c,double y)
        {
            number=nu;
            name=na;
            code=c;
            yue=y;
        }
        public Account() {
            // TODO Auto-generated constructor stub
        }
        public void cunkuan(int m)//存款
        {
            yue=yue+m;
        }
        public void zhuanzhang(Account hanghao)//转账,参数为行号
        {
            System.out.println("请输入转账金额:");
            Scanner z=new Scanner(System.in);
               int zh=z.nextInt();
               if(yue>=zh)
               {
                   yue=yue-zh;
                   System.out.println("转账成功!");
                   hanghao.yue=+zh;
               }
               else
               {
                   System.out.println("余额不足!不能完成转账!");
               }
        }
        public void qukuan(int n)//取款
        {
            yue=yue-n;
        }
    }
    public class ATM {
    
        public static void main(String[] args) {
            // TODO Auto-generated method stub
            //用户插卡后
            String a;
            String b,c;
            int a1,b1,c1;
            Account acc=new Account();
            Account acc1=new Account();
            acc.set("my123456789","张贺",202862, 1000);
            //插卡后用户界面,选择语言界面
            a=JOptionPane.showInputDialog( "选择语言:(1.English;2.中文)");
            a1 = Integer.parseInt(a); 
            if(a1==1)
            {
                JOptionPane.showMessageDialog(null,"English", "选择语言",
                         JOptionPane.PLAIN_MESSAGE );
            }
            if(a1==2)
            {
                JOptionPane.showMessageDialog(null,"中文", "选择语言",
                     JOptionPane.PLAIN_MESSAGE );
            }
            //输入密码界面
            b=JOptionPane.showInputDialog( "请输入密码:");
            b1= Integer.parseInt(b); 
            if(b1==acc.code)
            {
                JOptionPane.showMessageDialog(null,"成功登录!", "选择语言",
                         JOptionPane.PLAIN_MESSAGE );
            }
            else
            {
                JOptionPane.showMessageDialog(null,"该卡已被锁定!", "选择语言",
                         JOptionPane.PLAIN_MESSAGE );
            }
            c=JOptionPane.showInputDialog( "选择语言:(1.转账;2.取款;3.存款)");
            c1 = Integer.parseInt(c); 
            if(c1==1)
            {
                acc.zhuanzhang(acc1);
            }
            else if(c1==2)
            {
                int n = 0;
                acc.qukuan(n);
            }
            else if(c1==3)
            {
                int m = 0;
                acc.cunkuan(m);
            }
        }
    
    }

  • 相关阅读:
    English,The Da Vinci Code,Chapter 1-3
    Algorithm,Ds,Binary Indexed Trees,树状数组,二分索引树
    Algorithm,Acm,RMQ
    Algorithm,Number Theory,Prime
    Algorithm,Number Theory,GCD
    English,The Da Vinci Code
    Algorithm,LCA,Tarjan,深搜+并查集,最近公共祖先
    python,keyword arguments
    Qt,QObject
    python,build in functions
  • 原文地址:https://www.cnblogs.com/zhangjiabei/p/6078003.html
Copyright © 2020-2023  润新知