抽象

抽象

如果父类的方法 不确定 如何实现 那么就是抽象方法
在这里插入图片描述

定义 : 抽象方法 :加上abstract关键字, 然后去掉大括号 直接分号结束
抽象类: 抽象方法所在的类 必须是抽象类才可以 在class 之前 写上一个 abstract
如何使用
不可直接创建 抽象对象
必须用一个子类来继承抽象类
子类必须覆盖重写抽象父类当中的所有的抽象方法
覆盖重写:子类去掉抽象方法的abstract 然后不上方法体大括号
创建子类对象进行使用
注意事项

关于抽象类的使用,以下为语法上要注意的细节,虽然条目较多,但若理解了抽象的本质,无需死记硬背。

  1. 抽象类不能创建对象,如果创建,编译无法通过而报错。只能创建其非抽象子类的对象。

理解:假设创建了抽象类的对象,调用抽象的方法,而抽象方法没有具体的方法体,没有意义。

  1. 抽象类中,可以有构造方法,是供子类创建对象时,初始化父类成员使用的。

理解: 子类的构造方法中,有默认的super(), 需要访问父类构造方法。

  1. 抽象类中,不-定包含抽象方法,但是有抽象方法的类必定是抽象类。

理解:未包含抽象方法的抽象类,目的就是不想让调用者创建该类对象,通常用于某些特殊的类结构设计。

  1. 抽象类的子类,必须重写抽象父类中所有的抽象方法,I否则,编译无法通过而报错。除非该子类也是抽象类。

理解:假设不重写所有抽象方法,则类中可能包含抽象方法。那么创建对象后,调用抽象的方法,没有意义。

案例 发红包:

群发普通红包。某群有多名成员,群主给成员发普通红包。普通红包的规则:

  1. 群主的一笔金额,从群主余额中扣除,平均分成n等份,让成员领取。

  2. 成员领取红包后,保存到成员余额中。

请根据描述,完成案例中所有类的定义以及指定类之间的继承关系,并完成发红包的操作。
分析

在这里插入图片描述

package Demo43;

public class User {
    private  String name ;
    private  int money;

    public User() {
    }

    public User(String name, int money) {
        this.name = name;
        this.money = money;
    }
  public  void  show (){
      System.out.println("我叫"+name+" 我有多少钱"+money);
  }
    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;
    }
}

package Demo43;

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<Integer> List){
        //多个红包当中抽取一个给自己
        //随机获取一个集合当中的索引编号
        int index =new Random().nextInt(List.size());
        int delta =List.remove(index);
        int money=super.getMoney();
        super.setMoney(money+delta);

    }

}



```java
package Demo43;

import java.util.ArrayList;

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

    public Manger(String name, int money) {
        super(name, money);
    }
     public ArrayList< Integer> send(int totalMoney,int count){
        ArrayList<Integer>  relist= new ArrayList<>();
        int leftMoney = super.getMoney();
        if (totalMoney>leftMoney){
            System.out.println("余额不足");
            return relist;
        }
         super.setMoney(leftMoney-totalMoney);
        int avg=totalMoney/count;
        int mod =totalMoney%count;
         for (int i = 0; i < count-1 ; i++) {
             relist.add(avg);
         }
         int last=avg+mod;
         relist.add(last);
         return  relist;
    }
}


```java
package Demo43;

import java.util.ArrayList;

public class Demo431 {
    public static void main(String[] args) {
        Manger manger =new Manger("群主",101);
        Member one =new Member("1hao ",0);
        Member two =new Member("2hao ",0);
        Member three =new Member("3hao ",0);

        manger.show();
        one.show();
        two.show();
        three.show();
        System.out.println("///////");
        ArrayList<Integer>   redlist =manger.send(20,3);
        one.receive(redlist);
        two.receive(redlist);
        three.receive(redlist);
        manger.show();
        one.show();
        two.show();
        three.show();


    }
}

在这里插入图片描述

展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 书香水墨 设计师: CSDN官方博客
应支付0元
点击重新获取
扫码支付

支付成功即可阅读