1-4 继承与多态\第2节 抽象类

P165day09_14_抽象的概念

在这里插入图片描述

P166day09_15_抽象方法和抽象类的格式

package cn.itcast.day09.demo11;

/*
抽象方法:就是加上abstract关键字,然后去掉大括号,直接分号结束。
抽象类:抽象方法所在的类,必须是抽象类才行。在class之前写上abstract即可。
抽象类中可以写普通的成员方法,不是说,全部都是抽象方法。

 */
public abstract class Animal {

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

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

}

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

package cn.itcast.day09.demo11;

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

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

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

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

}

package cn.itcast.day09.demo11;

public class Cat extends Animal {

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

}

package cn.itcast.day09.demo11;

public class DemoMain {

    public static void main(String[] args) {
//        Animal animal = new Animal(); // 错误写法!不能直接创建抽象类对象

        Cat cat = new Cat();
        cat.eat();
    }

}

P168day09_17_抽象方法和抽象类的注意事项

在这里插入图片描述

package demo12;
//为了说明第二点。
public class Main {
    public static void main(String[] args) {
        Zi zi = new Zi();//父类不能创建对象,因为它是抽象类。
        zi.eat();
        /*
        抽象父类的构造方法执行!为什么它是第一个?因为子类构造方法,默认赠送super
        子类构造方法执行!
        吃饭
         */
    }

}

package demo12;

public abstract class Fu {
    public Fu(){//抽象类可以写构造方法。
        System.out.println("抽象父类的构造方法执行!");
    }
    public abstract void eat();
}

package demo12;

public class Zi extends Fu{
    public Zi(){
//        super();
        System.out.println("子类构造方法执行!");
    }
    @Override
    public void eat() {
        System.out.println("吃饭");
    }
}

4、加入抽象爷爷类有两个抽象方法eat、sleep。
子类只覆盖重写了一个eat。那么这个子类也必须是抽象子类。
孙子类继承子类,覆盖重写sleep。

只要写上abstract就不能直接new。

一个爷爷,一个儿子,两个孙子。
一个动物类,一个狗类,一个金毛一个二哈如何实现?

package demo13;
//爷爷类=父类
public abstract class Animal {
    public abstract void eat();
    public abstract void sleep();
}

package demo13;

public  abstract class Daog extends Animal{
    @Override
    public void eat() {
        System.out.println("狗吃骨头");
    }
    // public abstract void sleep();
}
package demo13;

public class Jinmao extends Daog{
    @Override
    public void sleep() {
        System.out.println("金毛睡觉!");
    }
}

package demo13;

public class Erha extends Daog{
    @Override
    public void sleep() {
        System.out.println("二哈睡觉!");
    }
}

package demo13;

public class Main {
    public static void main(String[] args) {
//        Animal animal = new Animal();
//        Daog daog = new Daog();错误,都是抽象类
        Jinmao jinmao = new Jinmao();
        jinmao.eat();
        jinmao.sleep();

        Erha erha = new Erha();
        erha.eat();
        erha.sleep();
    }
}

P169day09_18_发红包案例_分析

在这里插入图片描述
抽象类是共性抽取!!!
群主有余额和姓名,但是有发红包。
群友也有余额和姓名,但是有收红包。
共性抽取:余额和姓名。abstract类。
然后群主和群友去继承他们。
在这里插入图片描述

P170day09_19_发红包案例_实现

package demo14;

public class User {
    private String name;
    private int money;//余额

    public void show(){
        System.out.println("Myname:"+name+"I have"+money);
    }
    public User() {
    }

    public User(String name, int money) {
        this.name = name;
        this.money = 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 demo14;

import java.lang.reflect.Array;
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 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++) {
//            为什么count-1?
//            因为我把前n-1个红包放在集合中
//            除不开的零头放在最后,自己单独处理。
            redlist.add(avg);
        }

        int last = avg + mod;
        redlist.add(last);
        return redlist;
    }
}

package demo14;

import java.lang.reflect.Array;
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 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++) {
//            为什么count-1?
//            因为我把前n-1个红包放在集合中
//            除不开的零头放在最后,自己单独处理。
            redlist.add(avg);
        }

        int last = avg + mod;
        redlist.add(last);
        return redlist;
    }
}

package demo14;

import java.util.ArrayList;

public class Main {
    public static void main(String[] args) {
        Manager manager = new Manager("群主",100);
        Member member1 = new Member("成员1",0);
        Member member2 = new Member("成员2",0);
        Member member3 = new Member("成员3",0);

        manager.show();
        member1.show();
        member2.show();
        member3.show();

//        发20块,分成3份
        ArrayList<Integer> redlist = manager.send(20,3);
        member1.receive(redlist);
        member2.receive(redlist);
        member3.receive(redlist);

        manager.show();
        member1.show();
        member2.show();
        member3.show();
        /*
        Myname:群主I have80
        Myname:成员1I have6
        Myname:成员2I have8
        Myname:成员3I have6
         */
    }
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值