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);
        }
    }

}

时间: 2024-11-04 06:31:07

08-多态动手动脑及课后实践性问题总结的相关文章

09-异常处理动手动脑及课后实践性问题总结

一.动手动脑:请阅读并运行AboutException.Java示例,然后通过后面的几页ppt了解Java中实现异常处理的基础知识. (1)源代码: import javax.swing.*; class AboutException { public static void main(String[] a) { double i=1, j=0, k; k=i/j; try { k = i/j; // Causes division-by-zero exception //throw new E

java多态动手动脑

实验任务一:多态实现ATM工作原理 1)源代码: package demo; import java.util.Scanner; class A{ String name; String date; String mima; int yu; String kahao; public A(String name,String date,String mima,int yu,String kahao) { this.name=name; this.date=date; this.mima=mima;

异常处理---动手动脑及课后作业

动手动脑1:请阅读并运行AboutException.java示例,然后通过后面的几页PPT了解Java中实现异常处理的基础知识. 源码: import javax.swing.*; class AboutException { public static void main(String[] a) { int i=1, j=0, k; k=i/j; try { k = i/j; // Causes division-by-zero exception //throw new Exception

JAVA语法基础 动手动脑及课后作业

动手动脑1: 仔细阅读示例: EnumTest.java,运行它,分析运行结果? public class EnumTest { public static void main(String[] args) { Size s=Size.SMALL; Size t=Size.LARGE; //s和t引用同一个对象? System.out.println(s==t);  // //是原始数据类型吗? System.out.println(s.getClass().isPrimitive()); //

JAVA 数组作业——动手动脑以及课后实验性问题

JAVA课后作业——动手动脑 一:阅读并运行示例PassArray.java,观察并分析程序输出的结果,小结,然后与下页幻灯片所讲的内容进行对照. 1.源代码 // PassArray.java // Passing arrays and individual array elements to methods //引用传递和按值传递 public class PassArray { public static void main(String[] args) { int a[] = { 1,

第八章多态动手动脑

[动手动脑一] "类型转换"知识点考核-2 下列语句哪一个将引起编译错误?为什么?哪一个会引起运行时错误?为什么? m=d; d=m; d=(Dog)m; d=c; c=(Cat)m; 先进行自我判断,得出结论后,运行TestCast.java实例代码,看看你的判断是否正确. class Mammal{} class Dog extends Mammal {} class Cat extends Mammal {} public class TestCast { public stat

第七讲 数组动手动脑和课后作业

[动手动脑1] 数据作为方法参数示例代码 int[] arr= new int[ 24 ]; -- modifyArray( arr ); 阅读并运行示例PassArray.java,观察并分析程序输出的结果,小结,然后与下页幻灯片所讲的内容进行对照. // PassArray.java // Passing arrays and individual array elements to methods public class PassArray { public static void ma

java动手动脑和课后实验型问题String类型

1.请运行以下示例代码StringPool.java,查看其输出结果.如何解释这样的输出结果?从中你能总结出什么? true true false 总结: 使用new关键字创建字符串对象时, 每次申请新开辟一个地址空间,存储的地址空间不一样(对象不同),string类型下hello是同一个对象,其内容和地址都相容. 2. public class StringEquals { /** * @param args the command line arguments */ public stati

java中08的动手动脑

任务一: ATM机模拟: 代码: //赵子鸣,20153131,信1505-2班 package Shi; import java.util.Scanner; abstract class Atm{ public abstract void zhuan(String a,double b); public abstract void setmima(String a); public abstract double getyue(); public abstract String getmima