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. ...
随机推荐
- Makefile使用库
这篇文章演示了Makefile使用mysqlpp库和lua库的写法. test.cpp: #include <iostream> #include <stdint.h> #in ...
- Hello Spring Framework——面向切面编程(AOP)
本文主要参考了Spring官方文档第10章以及第11章和第40章的部分内容.如果要我总结Spring AOP的作用,不妨借鉴文档里的一段话:One of the key components of S ...
- If you only do what you can do you'll never be more than you are now.
If you only do what you can do you'll never be more than you are now. 如果你只是做你力所能及的事,你将不会有所进步:
- 【转】破解Source Insight 3.5.0072过程 附:安装软件+注册机
转载地址:http://blog.csdn.net/qs_hud/article/details/8884867 注册机及软件下载地址:http://download.csdn.net/detail/ ...
- seaJS
1. seajs是用来进行模块化管理,将每一个功能当做是一个功能模块,在模块之间运用require进行连接,类似于java/C++/C等语言中的类. 2. 在文件html 的尾部引入入seajs的文件 ...
- Unity中各类物理投射性能横向比较
最近在优化摄像机部分代码,抽了个时间对物理投射这块进行了系统性的测试,发现了不少东西 测试工程下载地址: http://files.cnblogs.com/files/hont/RaycastTest ...
- Uva 1629 切蛋糕
题目链接:https://vjudge.net/contest/146179#problem/B 题意:一个矩形蛋糕上有好多个樱桃,现在要做的就是切割最少的距离,切出矩形形状的小蛋糕,让每个蛋糕上都有 ...
- 文档对象模型(DOM)中的结点属性
在文档对象模型中,每个结点都是一个对象.DOM结点有三个重要的属性:nodeName .nodeValue和nodeType,分别表示结点名称.结点的值和结点的类型 一.nodeName,结点名称,只 ...
- spring-listener&spring-task注解版本
1.spring-listener: a) import javax.servlet.ServletContextEvent;import javax.servlet.ServletContextLi ...
- 阅读笔记 火球UML大战需求分析3
在复习回顾的以前所学的UML 统一建模语言之后,要将他们融会贯通起来,必定要进行一次事件,这样才能更好地运用各种UML,所以,了解了所有的UML图之后,就要开始接收一个练习的项目了. 这里作者给的例子 ...