栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

java之多态

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

java之多态

Java 多态

多态是同一个行为具有多个不同表现形式或形态的能力。

多态实现步骤:
    1)在抽象父类中定义抽象方法
    2)子类继承抽象父类并重写父类中所有的抽象方法
    3)测试类中创建父类引用指向不同的子类实例,父类引用调用方法,调用的是子类重写后的那些方法 

多态的优点
  • 1. 消除类型之间的耦合关系
  • 2. 可替换性
  • 3. 可扩充性
  • 4. 接口性
  • 5. 灵活性
  • 6. 简化性

 向上转型(自动类型转换):父类的引用指向子类的实例
 向下转型(强制类型转换):子类的引用指向父类的引用

 

下面给大家分享一个发红包案例:

解析:一个群有群主,负责发红包,余额减少,红包分几份

        群员负责收红包,余额增加,随机抢一个红包,

 父类:User

public class User {
	private String name;//姓名
	private int money;//余额,也是当前用户的钱数
	public User(String name, int money) {
		super();
		this.name = name;
		this.money = money;
	}
	public User() {
		super();
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public int getMoney() {
		return money;
	}
	public void setMoney(int money) {
		this.money = money;
	}
	//展示下当前用户多少钱
	public void show(){
		System.out.println("我叫:"+name+",我有多少钱:"+money);
	}

群主发红包,余额减少:

import java.util.ArrayList;

public class Manager extends User {
	public Manager(){
		
	}

	public Manager(String name, int money) {
		super(name, money);
	}
	
	public ArrayList send(int totalMoney,int count){
		//首先需要一个集合,用来存储若干个红包的金额
		ArrayList redList = new ArrayList<>();
		
		//首先看一下群主自己有多少钱
		int leftMoney = super.getMoney();//群主当前余额
		if(totalMoney>leftMoney){
			System.out.println("余额不足");
			return redList;
		}
		
		//扣钱,其实就是重新设余额
		super.setMoney(leftMoney - totalMoney);
		
		//发红包需要平均拆分成为count份
		int avg = totalMoney / count ;
		int mod = totalMoney % count;//余额,也是甩下的零头
		
		//除不开的零头,包在最后一个红包中
		//下面把红包一个一个放进集合中
		for (int i = 0; i < count - 1; i++) {
			redList.add(avg);
		}
		
		//最后一个红包
		int last = avg + mod;
		redList.add(last);
		
		return redList;
	}
	}

群众抢红包,余额增加 

 

import java.util.ArrayList;
import java.util.Random;

public class Member extends User {
	
	public Member(){
		
	}

	public Member(String name, int money) {
		super(name, money);
		
	}
	
	public void receive(ArrayList list){
		//从多个红包中随便抽取一个,给我自己
		//随机获取一个集合中的索引编号
		int index = new Random().nextInt(list.size());
		
		//根据索引,从集合当中删除,并且得到被删除的红包,给我自己
		int delta = list.remove(index);
		//当前对象自己有多少钱
		int money = super.getMoney();
		//加法 ,并且重新设置过去
		super.setMoney(money + delta);
		
	}

}

最后来一个测试类:

import java.util.ArrayList;

public class MainRedPackjet {

	public static void main(String[] args) {
		Manager manager = new Manager("群主", 100);
		
		
		Member one = new Member("成员A", 0);
		Member two = new Member("成员B", 0);
		Member three = new Member("成员C", 0);
		
		manager.show();
		one.show();
		two.show();
		three.show();
		System.out.println("===================================");
		
		//群主总共发20块,分3个红包
		ArrayList redList = manager.send(20, 3);
		//三个普通成员收红包
		one.receive(redList);
		two.receive(redList);
		three.receive(redList);
		
		manager.show();//100-20=80
		//6,6,8,随机给三个人
		one.show();
		two.show();
		three.show();
	}

}

运行结果:

 

 

 

 

 

 

 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1033484.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号