博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
08多态
阅读量:4451 次
发布时间:2019-06-07

本文共 4175 字,大约阅读时间需要 13 分钟。

程序运行结果是什么? 如何解释会得到这样的输出?

 

当子类与父类拥有一样的方法,并且让一个父类变量引用一个子类对象时,到底调用哪个方法,由对象自己的“真实”类型所决定,这就是说:对象是子类型的,它就调用子类型的方法,是父类型的,它就调用父类型的方法。如果子类与父类有相同的字段,则子类中的字段会代替或隐藏父类的字段,子类方法中访问的是子类中的字段(而不是父类中的字段)。如果子类方法确实想访问父类中被隐藏的同名字段,可以用super关键字来访问它。如果子类被当作父类使用,则通过子类访问的字段是父类的

 

 

 这种编程方式有什么不合理的地方吗?

每一个动物都是分别写一次喂养程序,那么当被要求写多个动物时,将会有非常大的工作量

 

 动物园程序

package wsd;import java.util.Vector;public class Zoo {    public static void main(String[] args) {         Feeder f = new Feeder("小李");         Vector
ans = new Vector
(); //饲养员小李喂养一只狮子 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
ans) { for (Animal an : ans) { an.eat(); } }}interface Animal {
//动物基类 public abstract 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("我要减肥,所以每天只吃一点大米。"); }}

实验结果截图、

 

import java.util.Scanner;interface fangfa{public void show();public void qukuan();public void cunkuan();public void zhuanzhang();public void setAcount(String string, String string2, String string3, String string4, double i);public String getMima();}class atm implements fangfa{String kahao; //私有变量String name;String riqi;double yue;String mima;public atm(){ //无参构造函数}public atm(String kahao,String name,String riqi,String mima,double yue){ //有参构造函数this.kahao=kahao;this.name=name;this.riqi=riqi;this.mima=mima;this.yue=yue;}public void setAcount(String kahao,String name,String riqi,String mima,double yue){ //赋值this.kahao=kahao;this.name=name;this.riqi=riqi;this.mima=mima;this.yue=yue;}public String getkahao(){ return kahao;}//获得值public String getName(){
return name;}public String getRiqi(){
return riqi;}public String getMima(){
return mima;}public double getYue(){
return yue;}public void show(){System.out.println("余额为:"+yue);}public void cunkuan(){System.out.println("请输入存款金额:");Scanner s=new Scanner(System.in);yue+=s.nextDouble();show();}public void zhuanzhang(){atm q=new atm();Scanner s=new Scanner(System.in);System.out.println("请输入对方卡号:");q.kahao=s.nextLine();System.out.println("请输入转账金额:");double zhuan=s.nextDouble();yue=yue-zhuan;q.yue=q.yue+zhuan;show();}public void qukuan(){boolean f=true;while(f){System.out.println("1、100元");System.out.println("2、500元");System.out.println("3、1000元");System.out.println("4、1500元");System.out.println("5、2000元");System.out.println("6、5000元");System.out.println("7、其他金额");System.out.println("8、退卡");System.out.println("9、返回");System.out.println("请选择");Scanner s=new Scanner(System.in);int ch=s.nextInt();switch(ch){case 1:yue=yue-100;show();break;case 2:yue=yue-500;show();break;case 3:yue=yue-1000;show();break;case 4:yue=yue-1500;show();break;case 5:yue=yue-2000;show();break;case 6:yue=yue-5000;show();break;case 7:System.out.println("请输入取款金额:");double qu=s.nextDouble();yue=yue-qu;show();break;case 8:f=false;break;case 9:f=false;break;}}}}public class Atmduotai {public static void main(String[] args) {// TODO Auto-generated method stubfangfa a=new atm();a.setAcount("111111111111", "nasdf", "199508030048", "123456", 20000);System.out.println("请输入密码:");Scanner aa=new Scanner(System.in);String ba=aa.nextLine();if(ba.equals(a.getMima()))while(true){System.out.println("1、取款");System.out.println("2、存款");System.out.println("3、转账");System.out.println("4、查询");System.out.println("请选择:");Scanner s=new Scanner(System.in);int b=s.nextInt();switch(b){case 1:a.qukuan();break;case 2:a.cunkuan();break;case 3:a.zhuanzhang();break;case 4:a.show();}}}}

结果截图、

 

转载于:https://www.cnblogs.com/xhxdeblog/p/6077952.html

你可能感兴趣的文章
使用 padding-bottom 设置高度基于宽度的自适应
查看>>
进程有一个全局变量i,还有有两个线程。i++在两个线程里边分别执行100次,能得到的最大值和最小值分别是多少?...
查看>>
DB2 数据库中字段特定字符替换为空
查看>>
解决VS2015启动界面卡在白屏的处理方法
查看>>
IIS下配置跨域设置Access-Control-Allow-Origin
查看>>
JS金字塔
查看>>
Ajax与JSON的一些总结
查看>>
C#常用控件属性及方法介绍
查看>>
51单片机寻址方式
查看>>
DB太大?一键帮你收缩所有DB文件大小(Shrink Files for All Databases in SQL Server)
查看>>
二叉树
查看>>
Leetcode: Convert Sorted Array to Binary Search Tree
查看>>
#python#类和实例绑定属性和方法的总结
查看>>
C#委托事件的理解猫与老鼠的故事
查看>>
TS4
查看>>
tomcat server.xml配置详解
查看>>
java05
查看>>
前后端通信 (3种方式简单介绍)
查看>>
java条件语句练习题
查看>>
文件操作open,r,w,a三种模式
查看>>