课后作业一:接口多态:使用接口代替抽象基类

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多态之课程问题解决的更多相关文章

  1. JAVA字符串05之课程问题解决

    (一)古罗马皇帝凯撒在打仗时曾经使用过以下方法加密军事情报:请编写一个程序,使用上述算法加密或解密用户输入的英文字串. 1.设计思想:首先选择是加密字符串还是解密字符串,两种算法相似.如果要加密字符串 ...

  2. JAVA语法02之课程问题解决

    (一)示例程序+运行结果: ①EnumTest.java public class EnumTest { public static void main(String[] args) { Size s ...

  3. java-08多态与异常处理

    1.运行以下代码: public class ParentChildTest { public static void main(String[] args) { Parent parent=new ...

  4. JAVA编程讲座-吴老

    JAVA系列公开课第4讲:多态系列课程:从JAVA编程零基础讲起,同时结合工作中遇到的具体实例,语言清晰易懂,连续10周+深入讲解,打下编程基础,让我们一起打来自动化测试的大门时间:4月25日(周一) ...

  5. .NET Core CSharp初级篇 1-5 接口、枚举、抽象

    .NET Core CSharp初级篇 1-5 本节内容类的接口.枚举.抽象 简介 问题 如果你需要表示星期或者是某些状态,使用字符串或者数字是否不直观? 你是否发现,无论何种电脑,它的USB口的设计 ...

  6. php课程 12-41 多态是什么

    php课程 12-41 多态是什么 一.总结 一句话总结:一种请求,多种响应(根据参数类型和数量) 1.function useUsb(Usb $usb){}这句话是什么意思? 判断$usb参数是否实 ...

  7. java基础课程笔记 static 主函数 静态工具类 classpath java文档注释 静态代码块 对象初始化过程 设计模式 继承 子父类中的函数 继承中的构造函数 对象转型 多态 封装 抽象类 final 接口 包 jar包

    Static那些事儿 Static关键字 被static修饰的变量成为静态变量(类变量) 作用:是一个修饰符,用于修饰成员(成员变量,成员方法) 1.被static修饰后的成员变量只有一份 2.当成员 ...

  8. 20155228 2016-2017-2《Java程序设计》课程总结

    20155228 2016-2017-2<Java程序设计>课程总结 每周作业链接汇总 预备作业1 简要内容 了解「Trainer/Trainee」是最好的师生关系,对即将到来的翻转课堂有 ...

  9. [课程设计]Scrum 1.6 多鱼点餐系统开发进度

    [课程设计]Scrum 1.6 多鱼点餐系统开发进度(点餐页面按钮添加&修复) 1.团队名称:重案组 2.团队目标:长期经营,积累客户充分准备,伺机而行 3.团队口号:矢志不渝,追求完美 4. ...

随机推荐

  1. python中函数接收多余参数

    代码: def fun(x): return x print fun(10) 函数fun(x)接受参数是x,传入数字"10",打印函数的返回值结果 就是10,如果我传递多个参数时, ...

  2. Fortran 基础语法(一)

    GE是大于等于号(>=),GT是大于号(>),LE是小于等于号(<=),LT是小于号(<) IF基本用法   If(逻辑判断式) then …… End if If(逻辑判断式 ...

  3. 170106、用9种办法解决 JS 闭包经典面试题之 for 循环取 i

    闭包 1.正确的说,应该是指一个闭包域,每当声明了一个函数,它就产生了一个闭包域(可以解释为每个函数都有自己的函数栈),每个闭包域(Function 对象)都有一个 function scope(不是 ...

  4. 了解FreeRTOS源文件目录结构

    参考文献: Understanding the FreeRTOS directory structure. 从官网下载下来的FreeRTOS源文件包,对于每一个已经移植完成的处理器,都有一个与之对应的 ...

  5. Bash:-set设置位置变量结合while和shift使用

    #!/bin/bash aaa=( ) bbb=(a b c d) set -- ${aaa[@]} ));do } shift done set -- echo "------------ ...

  6. Android ProgressBar分析及自定义ProgressBar

    ProgressBar是在执行耗时操作时的一种人性化设计.分为两种形式:转圈的,能显示进度的. 而能取决于是什么样式的PregressBar,当然就是PregressBar的样式啦~ Widget.P ...

  7. React笔记整理

    大概大半年时间都在用react写项目,一直在笔记上零零星星地记录着,在新的一年即将到来之际,打算整理整理发出来. 一.React是什么? React是Facebook开源的用于构建用户界面的javas ...

  8. FileItem类的常用方法

    FileItem类的常用方法: 1.  boolean isFormField() isFormField方法用于判断FileItem类对象封装的数据是一个普通文本表单字段,还是一个文件表单字段,如果 ...

  9. easyui dialog iframe

    function toGrant(obj,url,showMsg) {                                        var dialog=$('#dlg_grant' ...

  10. ubuntu常见问题及解决

    1.反复关机后自动重启. 联网状态下输入以下命令. sudo apt-get install laptop-mode-tools 2.win和ubuntu双系统下,怎么修改启动顺序和等待时间? 1.开 ...