• 多态---课后作业


     

     

     

    1.运行结果:

    2.在程序中,前两组定义自己的变量,用自己的方法及成员变量;第三个parent=child,引用子类的方法及变量,第四个变量是父类的,方法是子类的,最后一个是强制转化,改变的是子类的变量,用的是子类的方法。

    3.通过自己反复改变ParentChildTest.java中的代码,和结论一致

    A)当子类与父类拥有一样的方法,并且让一个父类变量引用一个子类对象时,到底调用哪个方法,由对象自己的“真实”类型所决定,这就是说:对象是子类型的,它就调用子类型的方法,是父类型的,它就调用父类型的方法。

    B)如果子类与父类有相同的字段,则子类中的字段会代替或隐藏父类的字段,子类方法中访问的是子类中的字段(而不是父类中的字段)。如果子类方法确实想访问父类中被隐藏的同名字段,可以用super关键字来访问它。

    C)如果子类被当作父类使用,则通过子类访问的字段是父类的!

    用多态的方法模拟ATM操作流程。

    源代码:

    import java.util.Scanner;
    
    public class Atm extends User{
    
    	public Atm(String num, String name, int date, int mima, char use, double yu) {
    		super(num, name, date, mima, use, yu);
    	}
    
    	public static void main(String[] args) {
    		User user = new Atm("12345678910","胡建峰",1111,000000,' ',100.0);
    		System.out.println("请选择使用语言:1.汉语,2.English");
    		Scanner sca = new Scanner(System.in);
    		int choose = sca.nextInt();
    		
    		if(choose == 1)
    		{
    			System.out.print("请输入六位密码(初始密码为000000):");
    			int m = sca.nextInt();
    			if(m == user.getmima())
    				System.out.println("输入正确");
    			else
    			{
    				System.out.print("该卡已被锁定,无法操作!");
    				return;
    			}
    			
    		}
    		System.out.print("请选择要操作的选项:1.取款	2.存款	3.转账汇款
    4.修改密码	5.查询余额
    ");
    		int choose2 = sca.nextInt();
    		
    		while(choose != -1)
    		{
    			if(choose2 == 1)
    			{
    				System.out.println("请选择取款金额:");
    				System.out.println("1.100	2.500	3.1000	4.1500	5.2000	6.5000	7.其他金额	8.退卡");
    				int choose3 = sca.nextInt();
    				double y = user.getYu(), q;
    				double [] yy = {100, 500, 1000, 1500, 2000, 5000};
    				
    				if(choose3 == 8)
    					return;
    				else if(choose3 == 7)
    				{
    					System.out.print("请输入要取的金额:");
    					q = sca.nextDouble();
    				}
    				else
    					q = yy[choose3 - 1];
    				
    				if((y - q) < 0)
    				{
    					System.out.println("余额不足!");
    				}
    				else
    				{
    					user.setYu(y - q);
    					System.out.println("取款成功!");
    				}
    				
    				System.out.print("请选择要操作的选项:1.取款	2.存款	3.转账汇款
    4.修改密码	5.查询余额
    ");
    				choose2 = sca.nextInt();
    			}
    			else if(choose2 == 2)
    			{
    				System.out.println("请输入存的金额:");
    				double cun = sca.nextDouble();
    				user.setYu(user.getYu() + cun);
    				System.out.print("请选择要操作的选项:1.取款	2.存款	3.转账汇款
    4.修改密码	5.查询余额
    ");
    				choose2 = sca.nextInt();
    			}
    			else if(choose2 == 3)
    			{
    				System.out.println("请输入转账的账户:");
    				String hu = sca.next();
    				System.out.println("输入转账金额:");
    				double zhua = sca.nextDouble();
    				System.out.println("转账成功!");
    				System.out.print("请选择要操作的选项:1.取款	2.存款	3.转账汇款
    4.修改密码	5.查询余额
    ");
    				choose2 = sca.nextInt();
    			}
    			else if(choose2 == 4)
    			{
    				System.out.println("请输入新的密码:");
    				int newmima = sca.nextInt();
    				user.setmima(newmima);
    				System.out.print("请选择要操作的选项:1.取款	2.存款	3.转账汇款
    4.修改密码	5.查询余额
    ");
    				choose2 = sca.nextInt();
    			}
    			else if(choose2 == 5)
    			{
    				System.out.println("当前余额:" + user.getYu());
    				System.out.print("请选择要操作的选项:1.取款	2.存款	3.转账汇款
    4.修改密码	5.查询余额
    ");
    				choose2 = sca.nextInt();
    			}
    			else
    			{
    				System.out.println("输入有误!");
    				choose2 = sca.nextInt(); 
    			}	
    		}
    		sca.close();
    	}
    
    }
    
    class User
    {
    	
    
    	String num;
    	String name;
    	int Date;
    	int mima;
    	char use;
    	double yu;
    	
    	public User(String num, String name, int date, int mima, char use, double yu)
    	{
    		this.num = num;
    		this.name = name;
    		Date = date;
    		this.mima = mima;
    		this.use = use;
    		this.yu = yu;
    	}
    	
    	public double getYu() {
    		return yu;
    	}
    
    	public void setYu(double yu) {
    		this.yu = yu;
    	}
    
    	public int getmima()
    	{
    		return mima;
    	}
    
    	public void setmima(int i) {
    		mima = i;
    	}
    	
    	public void setuse(char c)
    	{
    		use = c;
    	}
    	
    	public char getuse()
    	{
    		return use;
    	}
    }
    

      

     

    运行结果截图:

     

    错误情况:

     

  • 相关阅读:
    .Net学习难点讨论系列2 – 细说C#中new关键字与多态
    [翻译]搜索关键字 – 管道与过滤器模式(PipesandFilters)与装饰模式(Decorator)之间的关系
    .Net学习难点讨论系列1 – 委托与事件之事件
    [翻译]Popfly系列课程1 Popfly课程计划概览
    常用桌面虚拟化软件横向对比
    各种算法的C#实现系列1 合并排序的原理及代码分析
    博客园安家
    疑:Microsoft® Silverlight™ Tools for Visual Studio 2008 SP1的版本让人困惑
    stream_socket_client
    stream_socket_client2
  • 原文地址:https://www.cnblogs.com/fylove/p/6078825.html
Copyright © 2020-2023  润新知