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

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. Linux下面配置文件~/.bash_profile

    ~/.的意义是什么? ~ 代表你的/home/用户名目录 假设你的用户名是x,那么~/就是/home/x/ . 是代表此目录本身,但是一般可以不写 所以cd ~/. 和cd ~ 和cd ~/效果是一样 ...

  2. Paxos算法与Zookeeper分析

    1 Paxos算法 1.1 基本定义 算法中的参与者主要分为三个角色,同时每个参与者又可兼领多个角色: ⑴proposer 提出提案,提案信息包括提案编号和提议的value; ⑵acceptor 收到 ...

  3. json字符串转java对象数组

    需要引入json-lib-2.2-jdk15.jar和ezmorph-1.0.6.jar包 String itemStar = request.getParameter("itemStar& ...

  4. oracle游标透彻详解分析

    主:本文来自:http://www.cnblogs.com/huyong/archive/2011/05/04/2036377.html 4.1 游标概念 4.1.1 处理显式游标 4.1.2 处理隐 ...

  5. PowerShell添加或修改注册表开机启动项脚本

    代码如下: $name = Read-Host "请输入开机启动项的名字(随便起)" $value = Read-Host "请输入开机启动项的值" try{ ...

  6. python之RabbitMQ

    一.安装RabbitMQ 1. 安装erlang 1 2 3 4 tar xf otp_src_18.3.tar.gz cd otp_src_18.3 ./configure --prefix=/ma ...

  7. HDU1232 畅通工程 并查集

    畅通工程 Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submis ...

  8. Swift基础语法学习总结(转)

    Swift基础语法学习总结 1.基础  1.1) swift还是使用// 和/* */ 来注释,并且/* */允许多行注释. 1.2) swift使用print和println打印,它的传参是一个泛型 ...

  9. linux常用命令汇总

    1. 文件及文件夹操作 1.1 修改文件名 mv abc ab 把文件名abc改为ab. 1.2 删除文件和文件夹 rm abc rm -rf abc 1.3 拷贝文件夹 格式: CP [选项]  源 ...

  10. VB默认属性、动态数组、Range对象的默认属性的一点不成熟的想法

    1.默认属性 VB6.0有默认属性的特性.当没有给对象指定具体的属性时,"默认属性"是VB6.0将使用的属性.在某些情形下,省略常用属性名,使代码更为精简. 因为CommandBu ...