java中多态的使用

Posted 发酸的土豆

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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=100;
    public void printValue() {
        System.out.println("Parent.printValue(),myValue="+myValue);
    }
}
class Child extends Parent{
    public int myValue=200;
    public void printValue() {
        System.out.println("Child.printValue(),myValue="+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=Data1;
		mima=mima1;
		money=money1;
	}
	/*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();
		
		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中多态的使用的主要内容,如果未能解决你的问题,请参考以下文章

每个人单核苷酸多态性(SNP)形成的原因是啥?

java语言中的多态概述

Java多态——代码复用性

Java 多态

如何在片段中使用 GetJsonFromUrlTask​​.java

将 UML 图实现为 java 代码(同时使用聚合和多态)