多态---课后作业

 

 

 

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.取款\t2.存款\t3.转账汇款\n4.修改密码\t5.查询余额\n");
		int choose2 = sca.nextInt();
		
		while(choose != -1)
		{
			if(choose2 == 1)
			{
				System.out.println("请选择取款金额:");
				System.out.println("1.100\t2.500\t3.1000\t4.1500\t5.2000\t6.5000\t7.其他金额\t8.退卡");
				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.取款\t2.存款\t3.转账汇款\n4.修改密码\t5.查询余额\n");
				choose2 = sca.nextInt();
			}
			else if(choose2 == 2)
			{
				System.out.println("请输入存的金额:");
				double cun = sca.nextDouble();
				user.setYu(user.getYu() + cun);
				System.out.print("请选择要操作的选项:1.取款\t2.存款\t3.转账汇款\n4.修改密码\t5.查询余额\n");
				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.取款\t2.存款\t3.转账汇款\n4.修改密码\t5.查询余额\n");
				choose2 = sca.nextInt();
			}
			else if(choose2 == 4)
			{
				System.out.println("请输入新的密码:");
				int newmima = sca.nextInt();
				user.setmima(newmima);
				System.out.print("请选择要操作的选项:1.取款\t2.存款\t3.转账汇款\n4.修改密码\t5.查询余额\n");
				choose2 = sca.nextInt();
			}
			else if(choose2 == 5)
			{
				System.out.println("当前余额:" + user.getYu());
				System.out.print("请选择要操作的选项:1.取款\t2.存款\t3.转账汇款\n4.修改密码\t5.查询余额\n");
				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;
	}
}

  

 

运行结果截图:

 

错误情况:

 

 

posted @ 2016-11-18 18:59  丶枫  阅读(374)  评论(0编辑  收藏  举报