今天学到继承,做了个小案例:模拟群主发红包,成员抢红包的过程,具体如下:
// 这是父类 public class User { private String name; private int age; // 代表余额,习惯的写了个age..... public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public User() { } public User(String name, int age) { this.name = name; this.age = age; } public void show() { System.out.println("name: "+this.getName()+"; money: "+ this.getAge()); } }
package com.siwei.day09.demo01; import java.util.ArrayList; // 群主类 public class Manager extends User { public Manager() { } public Manager(String name, int age) { super(name, age); } /* 发红包方法 返回值: Arraylist集合,用来保存发了几个红包,每个红包多少钱 方法名: send 参数列表: 1.红包的总金额; 2.发给多少个人 */ public ArrayList<Integer> send(int totalMoney,int count) { ArrayList<Integer> redList = new ArrayList<>(); int leftMoney = super.getAge(); if (totalMoney>leftMoney){ System.out.println("余额不足"); return redList; } super.setAge(leftMoney-totalMoney); int avg = totalMoney / count; // 平均多少钱 int mod = totalMoney % count; // 除不尽的钱放到最后一个红包 for (int i = 0; i < count-1; i++) { redList.add(avg ); } redList.add(avg+mod); return redList; } }
package com.siwei.day09.demo01; import java.util.ArrayList; import java.util.Random; // 成员类 public class Member extends User { public Member(String name, int age) { super(name, age); } public Member() { } /* * 收红包的方法 * 返回值: void * 方法名: recevie * 参数列表: 红包集合 Arraylist * */ public void recevie(ArrayList<Integer> al) { int index = new Random().nextInt(al.size()); int money = al.remove(index); super.setAge(super.getAge()+money); } }
主方法:
public class Test { public static void main(String[] args) { Manager m = new Manager("群主",100); Member a = new Member("成员A",0); Member b = new Member("成员B",0); Member c = new Member("成员C",0); m.show(); a.show(); b.show(); c.show(); System.out.println("=============="); ArrayList<Integer> al = m.send(20,3); a.recevie(al); b.recevie(al); c.recevie(al); m.show(); a.show(); b.show(); c.show(); } }
子类中的群主类和成员类都在调用父类的setter方法或getter方法,我的理解是这样都操作的是同一组数据(父类User中的),会导致成员和群主的余额都是一个数据. 但是结果却不受影响,每个对象都有自己对应的数据,这是怎么回事?还是说子类在创建对象时,先调用了父类的构造函数,父类的构造函数中有this关键字,其实就是代表了子类对象本身,在子类对象中就会有自己独有的一组属性来保存数据,不受父类中的属性值影响?
群主类和成员类中的send()和recevie()方法中,为什么写父类super的getter或者setter方法,为什么不用自己的this.getter或setter方法?
原文:https://www.cnblogs.com/symsy/p/10508243.html