• 多态


    一、

    现在有三个类: class Mammal{} class Dog extends Mammal {} class Cat extends Mammal{} 针对每个类定义三个变量并进行初始化 Mammal m=null ; Dog d=new Dog(); Cat c=new Cat();下列语句哪一个将引起编译错误?为什么?哪一个会引起运行时错误?为什么? m=d; d=m; d=(Dog)m; d=c; c=(Cat)m;先进行自我判断,得出结论后,运行TestCast.java实例代码,看看你的判断是否正确。

    错误在: d=m; d=c;基类给子类赋值时没有进行强制类型转化。不是继承关系的类之间不能进行赋值。

    二、

            

    1. 左边的程序运行结果是什么? 2. 你如何解释会得到这样的输出? 3. 计算机是不会出错的,之所以得 到这样的运行结果也是有原因的, 那么从这些运行结果中,你能总 结出Java的哪些语法特性?

    1)结果:

    Parent.printValue(),myValue=100
    Child.printValue(),myValue=200
    Child.printValue(),myValue=200
    Child.printValue(),myValue=200
    Child.printValue(),myValue=201

    2)解释原因与Java语法特性:

    当子类与父类拥有一样的方法,并且让一个父类变量引用一个子类对象时,到底调用哪个方法,由对象自己的“真实”类型所决定,这就是说:对象是子类型的,它就调用子类型的方法,是父类型的,它就调用父类型的方法。 这个特性实际上就是面向对象“多态”特性的具体表现。

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

     

    三、

    让我们看一个开发场景: 某动物园有一饲养员小李, 每天需要给他所负责饲养的狮子、猴子和鸽子喂食。 请用一个程序来模拟他喂食的过程。三种动物对应三个类,每个类定义一个eat()方法,表示吃饲养员给它们的食物再设计一个Feeder类代表饲养员,其name字段保存饲养员名字,三个方法分别代表喂养三种不同的动物,其参数分别引用三种动物对象。

    这种编程方式有什么不合理的地方吗?

    编写语句太复杂,麻烦。进行修改时,需要进行大规模的变动。

     

     4.ATM机:

    源代码:

    package K;
    import java.util.Scanner;
    abstract class A{

    abstract void qukuan();
    abstract void cunkuan();
    abstract void zhuan(ATM a);

    }

    class ATM extends A{
    Scanner scanner =new Scanner(System.in);
    double money;
    String kahao;
    int mima;
    String name;
    String getkahao()
    {
    return kahao;
    }
    void showmoney()
    {
    System.out.println("1 100元"+" 2 500元"+" 3 1000元");
    System.out.println("4 1500元"+" 5 2000元"+" 6 5000元");

    }
    void setmoney(double a)
    {
    money = a;
    }
    double getmoney()
    {
    return money;
    }
    void setmima(int a)
    {
    mima = a;
    }
    int getmima()
    {
    return mima;
    }
    void setkahao(String a)
    {
    kahao = a;
    }
    String getname()
    {
    return name;
    }
    void setname(String a)
    {
    name = a;
    }
    void show()
    {
    System.out.println("姓名"+" "+name+" 卡号"+" "+kahao+" ");
    }
    void qukuan()
    {
    showmoney();
    System.out.println("请输入取款数额:");
    int j = scanner.nextInt();
    setmoney(getmoney()-j);
    System.out.println("取款成功!");
    }
    void cunkuan()
    {
    System.out.println("请输入存款的数额:");
    double b = scanner.nextDouble();
    setmoney(getmoney()+b);
    System.out.println("存款成功!");
    }
    void zhuan(ATM a1)
    {
    System.out.println("请输入卡号:");
    String e = scanner.next();

    if(a1.getkahao().equals(e))
    {
    System.out.println("请输入转的数额:");
    double b = scanner.nextDouble();
    a1.setmoney(a1.getmoney()+b);
    setmoney(getmoney()-b);

    System.out.println("转账成功!");
    }
    else{System.out.println("转账失败!");}
    }
    }
    public class DIII {

    public static void main(String[] args) {
    Scanner scanner =new Scanner(System.in);
    int i;int l = 1;
    ATM a = new ATM();
    ATM a1 = new ATM();

    a.setmima(000000);a.setname("迪迦");a.setmoney(10000000);a.setkahao("sssssssssss1");
    a1.setmima(000000);a1.setname("卡布达");a1.setmoney(100000000);a1.setkahao("qqqqqqqqqqq1");
    a.show();
    a1.show();
    while(l==1)
    {

    System.out.println("请输入密码(000000):");
    int y = scanner.nextInt();
    if(y==a.getmima())
    {

    System.out.println(" 1取款");
    System.out.println(" 2退卡");
    System.out.println(" 3存款");
    System.out.println(" 4转账");
    System.out.println("请输入操作前的数字:");
    i = scanner.nextInt();
    switch(i)
    {
    case 1:{a.qukuan();
    break;
    }
    case 2:{
    break;
    }
    case 3:{
    a.cunkuan();break;
    }
    case 4:{
    a.zhuan(a1);
    break;
    }
    }
    }
    else
    {
    System.out.println("密码错误!");
    }

    }
    }

    }

     

  • 相关阅读:
    Android studio开发找不到HttpClient问题
    Android studio开发找不到HttpClient问题
    互联网应用之传递HTTP参数
    互联网应用之传递HTTP参数
    计算机组成原理
    计算机组成原理
    【NYOJ】[40]公约数和公倍数
    【NYOJ】[40]公约数和公倍数
    【NYOJ】[39]水仙花数
    【NYOJ】[39]水仙花数
  • 原文地址:https://www.cnblogs.com/anheidijia-123/p/6079502.html
Copyright © 2020-2023  润新知