Java学习_问题

今天学到继承,做了个小案例:模拟群主发红包,成员抢红包的过程,具体如下:

// 这是父类
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方法?

posted @ 2019-03-11 00:36  symsy  阅读(183)  评论(0编辑  收藏  举报