java抽象方法和抽象类的使用

抽象方法: 就是加上abstract关键字,然后去掉大括号,直接分号结束。
抽象类:抽象方法所在的类,必须是抽象类才行。在class之前加上abstract即可。

如何使用抽象类和抽象方法:
1:不能直接创建new抽象类对象。
2:   必须用一个子类来继承抽象父类。
3:子类必须覆盖重写抽象父类当中所有的抽象方法。
      覆盖重写(实现):子类去掉抽象方法的abstract关键字,然后补上方法体大括号。
4:创建子类对象进行使用。

public abstract class Animal {
    //这是一个抽象方法,代表吃东西,但是具体吃什吗(大括号的内容)不确定。
    public abstract void eat();

    //这是普通成员方法
    public void normalMethod(){

    }
}

public class Cat extends Animal{
    @Override
    public void eat(){
        System.out.println("猫吃鱼");
    }
}
public class DemoMain {
    public static void main(String[] args) {
//        Animal animal = new Animal();//错误写法!不能直接创建抽象对象
        Cat cat = new Cat();
        cat.eat();
    }
}

 

public abstract class Fu {

    public Fu(){
        System.out.println("抽象父类构造方法执行啦");
    }

    public abstract void eat();
}
public class Zi extends Fu{

    public Zi(){
        //super();
        System.out.println("子类构造方法执行啦");
    }

    @Override
    public void eat() {
        System.out.println("吃饭饭");
    }
}

扩展

/*
一个抽象类不一定含有抽象方法,
只要保证抽象方法所在的类是抽象类,即可。

这样没有抽象方法的抽象类,也不能直接创建对象,在一些特殊场景下有用途
 */
public abstract class MyAbstract {
}

抽象类举例


//最高抽象父类
public abstract class Animal {

    public abstract void sleep();

    public abstract void eat();

}
//子类也是一个抽象类
public abstract class Dog extends Animal {

    @Override
    public void eat(){
        System.out.println("狗吃骨头");
    }

//    public abstract void sleep();//
}
//金毛类
public class DogJinMao extends Dog{

    @Override
    public void sleep(){
        System.out.println("呼呼呼。。。。");
    }

}
//哈士奇类
public class DogHaoShiQi extends Dog{
    
    @Override
    public void sleep() {
        System.out.println("嘿嘿嘿。。。。。");
    }
}
public class DemoMain {
    public static void main(String[] args) {
//        Animal animal = new Animal();//错误写法;不能直接创建抽象类。
//        Dog dog = new Dog();//错误,这也是抽象类
        DogJinMao dogJinMao = new DogJinMao();//这是个普通类,可以直接new对象
        dogJinMao.eat();
        dogJinMao.sleep();

        System.out.println("============");

        DogHaoShiQi dogHaoShiQi = new DogHaoShiQi();
        dogHaoShiQi.sleep();
        dogHaoShiQi.eat();
    }
}

 发红包案例

 红包案例分析:

 

public class User {

    private String name;//姓名
    private int money;//余额,也就是当前用户的剩余钱数。

    public User(){

    }

    public User(String name, int money){
        this.money = money;
        this.name = name;
    }

    //展示一下当前用户有多少钱
    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;
    }
}
import java.util.ArrayList;

//群主的类
public class Manager extends User{

    public Manager(){
//        super();//默认赠送
    }

    public Manager(String name, int money) {
        super(name, money);
    }

    public ArrayList<Integer> send(int totalMoney, int count){
        //首先需要一个集合,用来存储若干个红包的金额。
        ArrayList<Integer> redList = new ArrayList<>();

        //首先看下群主自己有多少钱
        int liftMoney = super.getMoney();//群主当前余额
        if(totalMoney > liftMoney){
            System.out.println("余额不足");
            return redList;//返回空集合
        }
        //扣钱,其实就是重新设置余额。
        super.setMoney(liftMoney - 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<Integer> list){
        //从多个红包当中随机抽取一个,给我自己。
        //随机获取一个集合当中的索引编号。
        int index = new Random().nextInt(list.size());
        //根据索引,从集合当中删除,并且得到被删除的红包,给我自己。
        Integer delta = list.remove(index);
        //当前成员自己本来有多少钱;
        int money = super.getMoney();
        //加法,并且重新设置回去
        super.setMoney(money + delta);
    }
}
import java.util.ArrayList;

public class DemoMain {
    public static void main(String[] args) {
        Manager manager = new Manager("群主老张", 100);

        Member memberA = new Member("老陈", 0);
        Member memberB = new Member("老网", 0);
        Member memberC = new Member("老李", 0);
        Member memberD = new Member("老铁", 0);

        manager.show();
        memberA.show();
        memberB.show();
        memberC.show();
        memberD.show();
        System.out.println("================");
        //群主共发50块钱红包,平均分成4分
        ArrayList<Integer> redList = manager.send(50,4);
        memberA.receive(redList);
        memberB.receive(redList);
        memberC.receive(redList);
        memberD.receive(redList);

        manager.show();//100 - 50 = 50
        //随机分给该4人
        manager.show();
        memberA.show();
        memberB.show();
        memberC.show();
        memberD.show();
    }
}

 

 

 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值