Java后端笔记3-继承、抽象类

一、周测总结
1、Java编译出错会继续往下执行
2、大的类型可以存储小的类型,例如 int、double 可以存储char类型
3、数组定义可以是 “类型[] 变量名”或 “类型 变量名[]”,只是后者不建议使用

二、继承
关键字:extends
构造方法无法被继承
私有无法被继承
单继承、提高代码复用性

import com.xiye.bean.Father;

/**
* Create by xiye on 2019/11/20 15:27
*/
public class Demo1_继承 extends Father {
    public int num = 20;
    public int number = 30;

    public static void main(String[] args) {
        Demo1_继承 demo = new Demo1_继承();
        demo.info();
        demo.testVar();
    }
    // 重写父类方法
    @Override
    protected void info() {
        super.info();
        System.out.println("子类方法");
    }

    public void testVar(){
        /*
        * 子类变量与父类变量同名时,调用父类变量需要用super调用
        * */
        System.out.println("子类变量:" + num);
        System.out.println("父类变量:" + super.number);
        System.out.println("子类变量与父类变量同名:" + number);
    }

    /*继承:提高代码复用性
    *
    * 关键字:extends
    *
    * this()是调用类本身无参构造器
    * super()是调用父类无参构造器
    * 在一个方法中,this()和super()只能出现一个,并且位于方法体首行
    *
    * 子类无法继承父类的构造器
    * 实现化一个类,该类继承一个父类,则该类的构造器默认有super(),即会初始化父类;若该类构造器调用自己其它构造器,则默认super()在最后一个构造器
    *
    * */
}
package com.xiye.bean;

/**
* Create by xiye on 2019/11/20 15:36
*/
public class Father extends GrandFather {
    private String name;
    private int age;
    public char number = 'a';

    public Father() {
        this("父类", 33);
        System.out.println("父类无参构造器");
    }

    public Father(String name, int age) {
        this.name = name;
        this.age = age;
        System.out.println("父类满参构造器");
    }

    protected void info() {
        System.out.println("父类方法");
    }

    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;
    }
}
package com.xiye.bean;

/**
* Create by xiye on 2019/11/20 15:48
*/
public class GrandFather {
    public GrandFather() {
        System.out.println("基类构造器");
    }
}

三、抽象类

import com.xiye.bean.Person;

/**
* Create by xiye on 2019/11/20 17:09
*/
public class Demo2_抽象 extends Person {

    /*抽象
     *
     * 关键字:abstract
     * 抽象类可以有抽象方法,也可以有普通方法
     * 有抽象方法的类一定是抽象类,而抽象类中不一定有抽象方法
     * 抽象类不能实例化(即不能创建对象),由子类继承抽象类,再实例化子类
     * 继承抽象类的子类要实现(重写)抽象类的所有抽象方法
     *
     * */

    public static void main(String[] args) {
        // new Person(); //无法实例化抽象类
        Demo2_抽象 demo = new Demo2_抽象();
        demo.info();
        demo.show();
    }
    // 必须实现/重写抽象类的抽象方法
    @Override
    public void info() {
        System.out.println("实现抽象类的抽象方法");
    }
}
package com.xiye.bean;

/**
* Create by xiye on 2019/11/20 17:10
*/
public abstract class Person {

    public abstract void info();
    public void show(){
        System.out.println("抽象类中的·普通·方法");
    }
    
}

四、领红包实例

package com.xiye.bean;

/**
* Create by xiye on 2019/11/20 17:25
*/
public class User {
    private String name;
    private double money;

    public User() {}
    public User(String name, double 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 double getMoney() {
        return money;
    }

    public void setMoney(double money) {
        this.money = money;
    }
}
package com.xiye.bean;

import java.util.ArrayList;

/**
* Create by xiye on 2019/11/20 17:29
*/
public class Lord extends User {

    public Lord() {
    }

    public Lord(String name, double money) {
        super(name, money);
    }

    public ArrayList<Double> faHongBao(double money, int count) {
        if (this.getMoney() < money) {
            System.out.println(this.getName() + "您当前余额不足。。。");
            return null;
        }
        if (count < 0) {
            System.out.println("红包个数至少一个哦^…^");
            return null;
        }

        double leftMoney = this.getMoney() - money;
        // 群主支付后剩余金额
        this.setMoney(leftMoney);
        // 金额均分装进红包
        ArrayList<Double> hbs = new ArrayList<>();
        double amount = money / count;

        for (int i = 0; i < count; i++) {
            hbs.add(amount);
        }

        return hbs;
    }
}
package com.xiye.bean;

import java.util.ArrayList;

/**
* Create by xiye on 2019/11/20 17:29
*/
public class Member extends User {
    public Member() {
    }

    public Member(String name, double money) {
        super(name, money);
    }

    public void kaiHongBao(ArrayList<Double> hbs) {
        if (hbs == null) {
            System.out.println("红包空空如也>·_·<");
            return;
        }
        if (hbs.size() == 0) {
            System.out.println(this.getName() + "你来晚啦!红包已被领完了~~~");
            return;
        }
        double amount = hbs.get(0);
        // 成员领红包增余额
        this.setMoney(this.getMoney() + amount);
        // 红包数量减一
        hbs.remove(0);
    }
}
import com.xiye.bean.Lord;
import com.xiye.bean.Member;

import java.util.ArrayList;

/**
* Create by xiye on 2019/11/20 17:45
*/
public class Demo3_红包 {
    public static void main(String[] args) {
        // 群主
        Lord lord = new Lord("地主", 1000);
        ArrayList<Double> hbs = lord.faHongBao(10000, 2);
        lord.show();

        // 成员
        Member m1 = new Member("农民A", 0);
        Member m2 = new Member("农民B", 10);
        Member m3 = new Member("农民C", 5);

        // 领红包
        m1.kaiHongBao(hbs);
        m1.show();

        m2.kaiHongBao(hbs);
        m2.show();

        m3.kaiHongBao(hbs);
        m3.show();
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值