• 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("选择存取金额"+"
    "+"1、100元"+"
    "+"2、500"+"
    "+"3、1000"+"
    "+"4、1500"+"
    "+"5、2000"+"
    "+"6、5000"+"
    "+"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("选择存取金额"+"
    "+"1、100元"+"
    "+"2、500"+"
    "+"3、1000"+"
    "+"4、1500"+"
    "+"5、2000"+"
    "+"6、5000"+"
    "+"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.取款"+"
    "+"2.存款"+"
    "+"3.转账"+"
    "+"4.修改密码"+"
    "+"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;
    	}
    }
    

      结果截图

  • 相关阅读:
    098实战 Job的调度
    maven在windows下的安装
    Map的知识点梳理(不包含collections工具类)
    001 LRU-缓存淘汰算法
    Android渲染机制和丢帧分析
    Android性能优化典范
    正确使用Android性能分析工具——TraceView
    android View 绘制完成监听
    那些年我们用过的显示性能指标
    view, surfaceView, invalidate, postInvalidate, 刷新屏幕
  • 原文地址:https://www.cnblogs.com/yuezhihao/p/6079522.html
Copyright © 2020-2023  润新知