首页 > 代码库 > java中多态的使用

java中多态的使用

 一.动手动脑

 

public class ParentChildTest {
    public static void main(String[] args) {
        Parent parent=new Parent();
        parent.printValue();
        Child child=new Child();
        child.printValue();
        
        parent=child;
        parent.printValue();
        
        parent.myValue++;
        parent.printValue();
        
        ((Child)parent).myValue++;
        parent.printValue();
        
    }
}

class Parent{
    public int myValue=http://www.mamicode.com/100;
    public void printValue() {
        System.out.println("Parent.printValue(),myValue="http://www.mamicode.com/+myValue);
    }
}
class Child extends Parent{
    public int myValue=http://www.mamicode.com/200;
    public void printValue() {
        System.out.println("Child.printValue(),myValue="http://www.mamicode.com/+myValue);
    }
}

截图结果

技术分享

结论:

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

这就是说:对象是子类型的,它就调用子类型的方法,是父类型的,它就调用父类型的方法。

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

二:动手动脑

 

动物园

public class Zoo 
{

    
	public static void main(String args[])
	{

        	Feeder f = new Feeder("小李");

        	//饲养员小李喂养一只狮子

        	f.feedAnimal(new Lion());
        	//饲养员小李喂养十只猴子

        	for (int i = 0; i < 10; i++) 
		{

	            f.feedAnimal(new Monkey());
	
        }

        	//饲养员小李喂养5只鸽子

        	for (int i = 0; i < 5; i++) 
		{

	            f.feedAnimal(new Pigeon());

        	}

    }

}


class Feeder 
{


    public String name;


    Feeder(String name) 
    {

        this.name = name;

    }

    
    public void feedAnimal(Animal an) 
   {

        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("我要减肥,所以每天只吃一点大米。");

    }

}

  技术分享

ATM机的实现:

import java.util.Scanner;

public class ATM {
	private  static String name;
	private  static String Data;
	private  static String mima;
	  static double money;
	  static ATM code=new ATM("岳志浩","11.13","123456",1000);
	static Scanner str=new Scanner(System.in);
	
	public ATM(String name1,String Data1,String mima1,double money1)
	{
		name=name1;
		Data=http://www.mamicode.com/Data1;"选择存取金额"+"\n"+"1、100元"+"\n"+"2、500"+"\n"+"3、1000"+"\n"+"4、1500"+"\n"+"5、2000"+"\n"+"6、5000"+"\n"+"7、其他金额");
		int caozuo=str.nextInt();
		
		if(caozuo==1)
		{
		    if(money<100)
		    {
		    	System.out.println("余额不足");
		    	qu();
		    }
			money=money-100;
			System.out.println("余额"+money);
		}
		if(caozuo==2)
		{
			
			    if(money<500)
			    {
			    	System.out.println("余额不足");
			    	qu();
			    }
			money=money-500;
			System.out.println("余额"+money);
		}
		if(caozuo==3)
		{
			
			    if(money<1000)
			    {
			    	System.out.println("余额不足");
			    	qu();
			    }
			money=money-1000;
			System.out.println("余额"+money);
		}
		if(caozuo==4)
		{
			
			    if(money<1500)
			    {
			    	System.out.println("余额不足");
			    	qu();
			    }
			money=money-1500;
			System.out.println("余额"+money);
		}
		if(caozuo==5)
		{

		
		    if(money<2000)
		    {
		    	System.out.println("余额不足");
		    	qu();
		    }
			money=money-2000;
			System.out.println("余额"+money);
		}
		if(caozuo==6)
		{
			   if(money<5000)
			    {
			    	System.out.println("余额不足");
			    	qu();
			    }
			money=money-5000;
			System.out.println("余额"+money);
		}
		if(caozuo==7)
		{
			double money1=str.nextDouble();
			    money=money-money1;
			System.out.println("余额"+money);
		}
		
	
	}
	*/
	public static  void qu()
	{
		System.out.println("选择存取金额"+"\n"+"1、100元"+"\n"+"2、500"+"\n"+"3、1000"+"\n"+"4、1500"+"\n"+"5、2000"+"\n"+"6、5000"+"\n"+"7、其他金额");
		int caozuo=str.nextInt();
		Qu a=new Qu();
		if(caozuo==1)
		{
			Qu100 b=new Qu100();
			a=b;
			b.qu(code);
			System.out.println("余额"+money);
		}
		if(caozuo==2)
		{
			Qu500 b=new Qu500();
			a=b;
			b.qu(code);
			System.out.println("余额"+money);
		}
		if(caozuo==3)
		{
			Qu1000 b=new Qu1000();
			a=b;
			a.qu(code);
			System.out.println("余额"+money);
		}
		if(caozuo==4)
		{
			Qu1500 b=new Qu1500();
			a=b;
			a.qu(code);
			System.out.println("余额"+money);
		}
		if(caozuo==5)
		{
			Qu2000 b=new Qu2000();
			a=b;
			a.qu(code);
			System.out.println("余额"+money);
		}
		if(caozuo==6)
		{
			Qu5000 b=new Qu5000();
			a=b;
			a.qu(code);
			System.out.println("余额"+money);
		}
		
	}
	public static void zhuan()
	{
		System.out.println("输入要转入的卡号");
		String ka=str.next();
		System.out.println("输入要转入金额");
		double money1=str.nextDouble();
		money=money-money1;
		System.out.println("转账成功");
	
	}
	public static void cun()
	{
		
		System.out.println("输入存取金额");
			double money1=str.nextDouble();
			money=money+money1;
			System.out.println("余额"+money);
	}
	public static void xugai()
	{
		System.out.println("输入要修改的密码");
		String mima1=str.next();
		mima=mima1;
		
	}
	public static void main(String args[])
	{
		
		System.out.println("输入密码");
		String mima1=str.next();
		if(mima1.equals(ATM.mima))
		{
			int x=0;
		while (x!=5)
		{
			
			
			if(x==1)
			{
				qu();
			
			}
			if(x==2)
			{
				cun();
			}
			if(x==3)
			{
				zhuan();
			}
			if(x==4)
			{
				xugai();
			}
			if(x==5)
			{
				System.out.println("用户名:"+name+"日期:"+Data+"余额:"+money);
				break;
			}
			System.out.println("选择操作");
			System.out.print("1.取款"+"\n"+"2.存款"+"\n"+"3.转账"+"\n"+"4.修改密码"+"\n"+"5.退卡");
			int w=str.nextInt();
			x=w;
			
		}
		}
		else 
		{
			System.out.println("密码错误");
		}
			
		
	}

}
class Qu
{
	
	public void qu(ATM a)
	{
	}
}
class Qu100 extends Qu
{
	
	public void qu(ATM a)
	{
		a.money=a.money-100;
	}
}
class Qu500 extends Qu
{
	
	public  void qu(ATM a)
	{
		a.money=a.money-500;
	}
}
class Qu1000 extends Qu
{
	
	public void qu(ATM a)
	{
		a.money=a.money-1000;
	}
}
class Qu1500 extends Qu
{
	
	public void qu(ATM a)
	{
		a.money=a.money-1500;
	}
}
class Qu2000 extends Qu
{
	
	public void qu(ATM a)
	{
		a.money=a.money-2000;
	}
}
class Qu5000 extends Qu
{
	
	public void qu(ATM a)
	{
		a.money=a.money-5000;
	}
}

  结果截图

技术分享

 

java中多态的使用