多态

1.运行测试如下代码

1.   左边的程序运行结果是什么?

2.   你如何解释会得到这样的输出?

3.   计算机是不会出错的,之所以得到这样的运行结果也是有原因的,那么从这些运行结果中,你能总结出Java的哪些语法特性?

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

2.下列语句哪一个将引起编译错误?为什么?哪一个会引起运行时错误?为什么?

m=d;

d=m;

d=(Dog)m;

d=c;

c=(Cat)m;

d=m,d=c引发错误,因为ddog的对象,mMammal的对象,所以这相当于直接将父类对象给子类要用强制类型转换,c,d是同一级,同为子类,不能相互赋值。

3.多态写Atm

import java.util.Scanner;

abstract class Account
{
	public abstract void display();
	public abstract  void qukuan();
	public abstract  void cunkuan();
	public abstract  void zhuanzhang();
	public abstract  void setAcount(String string, String string2, String string3, String string4, double i);
}
public   class Atm extends Account {
	
	public static void main(String[]args)
	{ 
		Atm a=new Atm();
		a.setAcount("abcd123456712","王五",123456,"2016.11.15",10);
		Scanner in=new Scanner(System.in);
		 boolean flag=true  ;
		 System.out.println("请输入用户名和密码:");
		   String na=in.nextLine();
		    String p=in.nextLine();
		 while(flag)
	   {	
		System.out.println("请选择语言界面(中文1,英文0):");
		int n=in.nextInt();
		if(n==1)
		{
		    System.out.println("1.取款");
			System.out.println("2.存款");
			System.out.println("3.显示余额");
			System.out.println("4.修改密码");
			System.out.println("5.转账");
			System.out.println("6.退出");
		    int choose=in.nextInt();
		    if(choose==1)
		    {
		    	a.qukuan();
		    }
		    else if(choose==2)
		    {
		    	a.cunkuan();
		    }
		    else if(choose==3)
		    {
		    	a.display();
		    }
		    else if(choose==4)
		    {
		    	System.out.println("请输入姓名:");
				System.out.println("请输入更改后的密码:");
				Scanner in1=new Scanner(System.in);
				String m=in1.nextLine();
		    }
		    else if(choose==5)
		    {
		    	a.zhuanzhang();
		    }
		    else
		    {
		    	break;
		    }
		}
	   }
	}
	public  int data;
	public String password;
	public  double count;
	public  String biaoshi;
	public String name;
	public String getbiaoshi()
	{
	return biaoshi;
	}
	public String getname()
	{
	return name;
	}
	public int getdata()
	{
	return data;
	}
	public String getpassword()
	{
	return password;
	}
	public double getcount()
	{
	return count;
	}
	public void setAcount(String hh,String na,int da,String pa,double e) {
		biaoshi=hh;
		name=na;
		data=da;
		password=pa;
		count=e;
	}
	public  void Account(String hh,String na,int da,String pa,double e)
	{
		biaoshi=hh;
		name=na;
		data=da;
		password=pa;
		count=e;
	}
	public Atm()
	{};
	public Atm(String hh, String na, int da, String pa, double e) {
		biaoshi=hh;
		name=na;
		data=da;
		password=pa;
		count=e;
	}
	
	public void qukuan() {
		Scanner in=new Scanner(System.in);
		System.out.println("可取款金额:");
        System.out.println("100元");
        System.out.println("500元");
        System.out.println("1000元");
        System.out.println("1500元");
        System.out.println("2000元");
        System.out.println("5000元");
        System.out.println("其他金额");
        System.out.println("请输入你要取款的金额:");
        double Q=in.nextDouble();
        if(count-Q<0)
        {
            System.out.println("余额不足!");
        }
        else
        {
        System.out.println("取款成功!");
         count=count-Q;
         
        }
	}
	public void cunkuan() {
		System.out.println("请输入存款金额:");
		Scanner in1=new Scanner(System.in);
		int m=in1.nextInt();
		count=count+m;
		System.out.println("存入金额"+m);
	}
	public void zhuanzhang() {
		System.out.println("请输入行号:");
		Scanner in6=new Scanner(System.in);
		String hang=in6.nextLine();
		if(hang.equals(biaoshi))
		{
		    System.out.println("请输入转账金额:");
		    Scanner in5=new Scanner(System.in);
		    double money=in5.nextDouble();
		    count=count-money;
	    }
	}
	@Override
	public void setAcount(String string, String string2, String string3, String string4, double i) {
		// TODO Auto-generated method stub
		
	}
	@Override
	public void display() {
		System.out.println("余额为:"+count);
	}
}
	

  

 

原文地址:https://www.cnblogs.com/1998lu/p/6079043.html