JAVA08多态之课程问题解决
课后作业一:接口多态:使用接口代替抽象基类
1.源代码:
- package zoo4;
- import java.util.Vector;
- public class Zoo2 {
- public static void main(String args[]) {
- Feeder f = new Feeder("小李");
- Vector<Animal> ans = new Vector<Animal>();//可随时向其中加入或移除对象
- //饲养员小李喂养一只狮子
- ans.add(new Lion());
- //饲养员小李喂养十只猴子
- for (int i = 0; i < 10; i++) {
- ans.add(new Monkey());
- }
- //饲养员小李喂养5只鸽子
- for (int i = 0; i < 5; i++) {
- ans.add(new Pigeon());
- }
- f.feedAnimals(ans);
- }
- }
- class Feeder {
- public String name;
- Feeder(String name) {
- this.name = name;
- }
- public void feedAnimals(Vector<Animal> ans) {
- for (Animal an : ans) {
- an.eat();
- }
- }
- }
- interface Animal {
- public void eat();
- }
- class Lion implements Animal {
- public void eat() {
- System.out.println("我不吃肉谁敢吃肉!");
- }
- }
- class Monkey implements Animal {
- public void eat() {
- System.out.println("我什么都吃,尤其喜欢香蕉。");
- }
- }
- class Pigeon implements Animal {
- public void eat() {
- System.out.println("我要减肥,所以每天只吃一点大米。");
- }
- }
2.运行截图:
课后作业二:用多态的方法模拟ATM操作流程。
1.源程序:
- package Work;
- //接口多态:使用接口代替抽象基类
- //李慧,2016.11.18
- import java.util.Scanner;
- import java.util.Vector;
- public class ATM{
- static AccountY stu[]=new Account[500];
- public static void main(String[] args) {
- // TODO Auto-generated method stub
- //主界面(5个用户)
- stu[0]=new Account("20153150","李慧","2016/11/15","123456",1000);
- stu[1]=new Account("20153151","李","2016/11/15","li",2000);
- stu[2]=new Account("20153152","木子","2016/11/15","muzi",3000);
- stu[3]=new Account("20153149","诺米","2016/11/15","nuomi",5000);
- stu[4]=new Account("20153148","夏小暑","2016/11/15","xiaxiaoshu",4800);
- String key;
- Scanner scan=new Scanner(System.in);
- Scanner scan1=new Scanner(System.in);
- Scanner scan2=new Scanner(System.in);
- Scanner scan3=new Scanner(System.in);
- int num=0;
- int k=1;
- System.out.println("请输入密码:");
- key=scan.nextLine();
- int b=0;
- for(int i=0;i< 5;i++)
- { if(!key.equals(stu[i].getKey()))
- { b++;}}
- if(b>=5){
- System.out.print("该卡已被锁定,无法操作");
- }
- else
- for(int i=0;i< 5;i++)
- {
- if(key.equals(stu[i].getKey()))
- {
- while(k==1)
- {
- System.out.println();
- System.out.print("1.存款 2.取款 3.转账汇款 4.修改密码 5.查询余额 6.退卡");
- System.out.println();
- System.out.print("请选择:");
- num=scan1.nextInt();
- if(num==6)
- { System.out.println("卡已成功退出!请拿卡!");
- break;
- }
- switch(num)
- {
- case 1://存款
- double m;
- System.out.print("请输入存入的金额:");
- m=scan2.nextDouble();
- stu[i].cun(m);
- break;
- case 2://取款
- int numm;
- System.out.print("100元\t500元\t1000元\t1500元\t2000元\t5000元\t其他金额\n"
- + "1.退卡");
- System.out.println();
- System.out.print("请选择:");
- numm=scan3.nextInt();
- if(numm==1) break;
- else
- stu[i].qu(numm);break;
- case 3://转账汇款
- String nummm;
- double cc;
- int n;
- System.out.print("请输入转账行号:");
- nummm=scan.nextLine();
- /*boolean b=true;
- for(int j=0;j<5;j++)
- {if(!nummm.equals(stu[j].getNum()))
- {
- b=false;
- }}
- if(b==false){
- System.out.println("信息错误!");
- }*/
- for(int j=0;j<5;j++)
- if(nummm.equals(stu[j].getNum()))
- {
- System.out.print("请输入转账金额:");
- cc=scan.nextDouble();
- System.out.print("请确认(1确认,0取消)");
- n=scan.nextInt();
- if(n==1)
- {
- stu[i].qu(cc);
- stu[j].cun(cc);
- System.out.print("转账成功!");
- }
- else if(n==0){
- System.out.print("已取消!");
- }
- else{
- System.out.print("发生错误!");
- }
- }
- break;
- case 4:
- String kk;
- System.out.print("请输入修改的密码:");
- kk=scan.nextLine();
- stu[i].setKey(kk);
- break;
- case 5:
- System.out.print("余额为:"+stu[i].getMoney());
- break;
- case 6:
- break;
- }
- }
- }}
- }
- }
- abstract class AccountY
- {
- public abstract String getNum();
- public abstract void setKey(String s);
- public abstract String getKey();
- public abstract double getMoney();
- public abstract void cun(double m);
- public abstract void qu(double m);
- }
- class Account extends AccountY{
- private String num;//长度为11,由数字和字符组合
- private String name;//用户的姓名
- private String Date;//操作日期
- private String key;//账户密码
- private double money;//当前余额
- public Account(String n,String a,String b,String c,double d){num=n;name=a;Date=b;key=c;money=d;}
- public String getNum(){return num;}
- public String getName(){return name;}
- public String getDate(){return Date;}
- public void setKey(String s){
- key=s;
- }
- public String getKey(){return key;}
- public double getMoney(){return money;}
- public void cun(double m){
- if(m<=200000)
- money+=m;
- else
- {System.out.println("超出限额!");}
- }
- public void qu(double m){
- if(m<money)
- money-=m;
- else
- System.out.println("超出余额!");
- }
- }
2.运行结果截图:
验证:
①TestInstanceof.java
代码如下:
- 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));
- }
- }
运行结果截图:
②TestCast.java
代码如下:
- 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;
- }
- }
运行结果没有出错!
③Zoo.java
代码如下:
- package zoo4;
- import java.util.Vector;
- public class Zoo {
- public static void main(String args[]) {
- Feeder f = new Feeder("小李");
- Vector<Animal> ans = new Vector<Animal>();//可随时向其中加入或移除对象
- //饲养员小李喂养一只狮子
- ans.add(new Lion());
- //饲养员小李喂养十只猴子
- for (int i = 0; i < 10; i++) {
- ans.add(new Monkey());
- }
- //饲养员小李喂养5只鸽子
- for (int i = 0; i < 5; i++) {
- ans.add(new Pigeon());
- }
- f.feedAnimals(ans);
- }
- }
- class Feeder {
- public String name;
- Feeder(String name) {
- this.name = name;
- }
- public void feedAnimals(Vector<Animal> ans) {
- for (Animal an : ans) {
- an.eat();
- }
- }
- }
- abstract class Animal {
- public abstract void eat();
- }
- class Lion extends Animal {
- public void eat() {
- System.out.println("我不吃肉谁敢吃肉!");
- }
- }
- class Monkey extends Animal {
- public void eat() {
- System.out.println("我什么都吃,尤其喜欢香蕉。");
- }
- }
- class Pigeon extends Animal {
- public void eat() {
- System.out.println("我要减肥,所以每天只吃一点大米。");
- }
- }
运行结果截图:
JAVA08多态之课程问题解决的更多相关文章
- JAVA字符串05之课程问题解决
(一)古罗马皇帝凯撒在打仗时曾经使用过以下方法加密军事情报:请编写一个程序,使用上述算法加密或解密用户输入的英文字串. 1.设计思想:首先选择是加密字符串还是解密字符串,两种算法相似.如果要加密字符串 ...
- JAVA语法02之课程问题解决
(一)示例程序+运行结果: ①EnumTest.java public class EnumTest { public static void main(String[] args) { Size s ...
- java-08多态与异常处理
1.运行以下代码: public class ParentChildTest { public static void main(String[] args) { Parent parent=new ...
- JAVA编程讲座-吴老
JAVA系列公开课第4讲:多态系列课程:从JAVA编程零基础讲起,同时结合工作中遇到的具体实例,语言清晰易懂,连续10周+深入讲解,打下编程基础,让我们一起打来自动化测试的大门时间:4月25日(周一) ...
- .NET Core CSharp初级篇 1-5 接口、枚举、抽象
.NET Core CSharp初级篇 1-5 本节内容类的接口.枚举.抽象 简介 问题 如果你需要表示星期或者是某些状态,使用字符串或者数字是否不直观? 你是否发现,无论何种电脑,它的USB口的设计 ...
- php课程 12-41 多态是什么
php课程 12-41 多态是什么 一.总结 一句话总结:一种请求,多种响应(根据参数类型和数量) 1.function useUsb(Usb $usb){}这句话是什么意思? 判断$usb参数是否实 ...
- java基础课程笔记 static 主函数 静态工具类 classpath java文档注释 静态代码块 对象初始化过程 设计模式 继承 子父类中的函数 继承中的构造函数 对象转型 多态 封装 抽象类 final 接口 包 jar包
Static那些事儿 Static关键字 被static修饰的变量成为静态变量(类变量) 作用:是一个修饰符,用于修饰成员(成员变量,成员方法) 1.被static修饰后的成员变量只有一份 2.当成员 ...
- 20155228 2016-2017-2《Java程序设计》课程总结
20155228 2016-2017-2<Java程序设计>课程总结 每周作业链接汇总 预备作业1 简要内容 了解「Trainer/Trainee」是最好的师生关系,对即将到来的翻转课堂有 ...
- [课程设计]Scrum 1.6 多鱼点餐系统开发进度
[课程设计]Scrum 1.6 多鱼点餐系统开发进度(点餐页面按钮添加&修复) 1.团队名称:重案组 2.团队目标:长期经营,积累客户充分准备,伺机而行 3.团队口号:矢志不渝,追求完美 4. ...
随机推荐
- Windows Azure 将正式更名为 Microsoft Azure
微软的公共云平台在2014年4月3日正式从Windows Azure 更名为Microsoft Azure. windows azure是二级产品名,microsoft azure是一级产品名,和mi ...
- 如何在LIRE搜索中使用多特征
这是官网上的解答,先mark下来. http://www.semanticmetadata.net/wiki/lirefaq/ ==================================== ...
- ROCKETMQ源码分析笔记1:tools
rocketmq源码解析笔记 大家好,先安利一下自己,本人男,35岁,已婚.目前就职于小资生活(北京),职位是开发总监. 姓名DaneBrown 好了.我保证本文绝不会太监!转载时请附上以上安利信息. ...
- 前言,学习ios编程(坚持)
其实,尝尝有人很疑惑,不知道自己要干嘛,看到很多的培训机构,不知道怎么选择但是又想进入软件行业.其实呢学习不一定要靠培训机构,一定要培训,特别是 当人家把自己吹的天花乱坠的时候,然并卵.出来之后,也只 ...
- push_back模式工作
自己决心今天做一个 xxx项目,写完xxx功能. 早晨9点多张三说:“A项目有一个 bug要修复”,估计十分钟就修复了,然后放弃手头项目去搞.修复这个bug的时候,发现这个A项目有些代码还有可以优化的 ...
- python实用小技巧自问自答系列(一):查看类中函数文档doc的方法
问题:如何查看某个类的方法文档说明或者是函数的参数列表情况? 答: 方法一:直接在需要查询的方法后面加上".__doc__"即可以打印出该方法的文档说明(需要先导入该方法所属模块) ...
- dpkg: 处理归档 /var/cache/apt/archives/软件名 (--unpack)时出错:由于已经达到 MaxReports 限制,没有写入 apport 报告。
一.环境介绍: OS:ubuntu16.04 64bit 二.错误如下: 正准备解包 .../libqt4-script_4%3a4.8.7+dfsg-5ubuntu2_i386.deb ...正在 ...
- js基础:函数表达式和函数声明
函数表达式和函数声明的区别.实际上,解析器在向执行环境中加载数据是,对函数表达式和函数声明并非一视同仁.解析器会率先读取函数声明,并使其在执行任何代码之前可用.而函数表达式,则必须等到解析器执行到它所 ...
- CSUOJ_1002
/* * Title : A+B(III) * Data : 2016/11/09 * Author : Andrew */ #include <iostream> #include &l ...
- 关于json-p
关于json-p 目录 关于json-p json-p是什么 json-p原理分析 json-p的缺点 json-p是什么 json-p实际上是一种跨域ajax发送http请求的方法,它不是什么全新的 ...