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. ...
随机推荐
- Andy - 又一款速度流畅的免费安卓 Android 模拟器 (支持手机无线控制电脑模拟器)
随着 Genymotion.BlueStacks 等电脑上的 Android 模拟器流行起来之后,似乎很多人都发现在电脑上运行使用安卓APP软件.畅玩手机游戏确实很有乐趣. 今天我们又发现了一款全新免 ...
- mysql基础安全
- presto的动态化应用(一):presto节点的横向扩展与伸缩
一.presto动态化概述 近年来,基于hadoop的sql框架层出不穷,presto也是其中的一员.从2012年发展至今,依然保持年轻的活力(版本迭代依然很快),presto的相关介绍,我们就不赘述 ...
- 在Linux上配置Zabbix的环境
useradd -s /bin/false zabbix mkdir /usr/local/zabbix_agent mv /home/zihexin/zabbix_agents_3.2.0.linu ...
- Jquery表单验证
.代码中添加引用(必备引用) <script src="Scripts/jquery-1.4.1.min.js" type="text/javascript&quo ...
- Hibernate框架简述 内部资料 请勿转载 谢谢合作
Hibernate的核心组件在基于MVC设计模式的JAVA WEB应用中,Hibernate可以作为模型层/数据访问层.它通过配置文件(hibernate.properties或hibernate.c ...
- 20161013001 DataGridView 数据转 DataTable
DataTable dt2 = GetDgvToTable(Form_CY_ProjectRequirements_D); MessageBox.Show( dt2.Rows.Count.To ...
- oracle杀用户建用户改密码脚本
# ******************************** # * dba_oracle_awr.sh # ******************************** # Usage: ...
- 开始学习Angular Mobile UI
介绍 Mobile AngularUI 可以让你使用Twitter Booostrap和Angular JS来开发混合移动App和桌面应用程序. 下面是是一些贯穿整个项目的步骤,我强烈的建议你去继续阅 ...
- Spark学习(四) -- Spark作业提交
标签(空格分隔): Spark 作业提交 先回顾一下WordCount的过程: sc.textFile("README.rd").flatMap(line => line.s ...