Java日志第17天 2020.7.22

Java继承的三个特征

1.Java语言是单继承的,一个类的直接有且仅有一个。

若一个子类有多个父类,当父类有相同方法名时,子类无法正常调用。

2.Java语言可以多级继承。

public  class A{}

public class B extends A{}

public class C extends B{}

如B继承A,C继承B,A也叫C的父类,只是间接继承。

*java.lang.Object是最高父类

3.一个子类只能有一个父类,但一个父类可以有多个子类。

抽象

如果父类当中方法不确定方法体的实现,那么该方法定义为抽象方法。

抽象方法所在的类,定义为抽象类

public abstract class A{ //A为抽象类

  public abstract void method();// 抽象方法

}


如何使用抽象类和抽象方法

1.不能直接创建new抽象类对象

2.必须有一个子类继承父类

3.子类必须覆盖重写父类中所有抽象方法

4.创建子类对象使用

 

抽象类注意事项

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

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

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

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

 

 

实例:群主发红包(继承方法的使用)

定义User类,有姓名和金额等变量

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 display(){
        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;
    }
}

 

 定义群主Manager类,实现发红包功能

import java.util.ArrayList;

public class Manager extends User {
    public Manager(){

    }

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

    public ArrayList<Integer> send(int totalMoney, int count){
        //一个集合存储若干个红包的金额
        ArrayList<Integer> readList = new ArrayList();

        //检查群主余额
        int leftMoney = super.getMoney();
        if(totalMoney > leftMoney){
            System.out.println("余额不足");
            return readList;
        }

        super.setMoney(leftMoney - totalMoney);

        int avg = totalMoney / count;
        int mod = totalMoney % count;

        for (int i = 0; i < count-1; i++) {
            readList.add(avg);
        }
        int last = avg + mod;
        readList.add(last);

        return readList;
    }
}

定义成员Member类,实现收红包功能
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);
    }
}

测试类

import java.util.ArrayList;

public class Test {
    public static void main(String[] args) {
        Manager manager = new Manager("群主",2000);

        Member member1 = new Member("member1",20);
        Member member2 = new Member("member2",60);
        Member member3 = new Member("member3",75);

        manager.display();
        member1.display();
        member2.display();
        member3.display();
        System.out.println("===================");

        System.out.println("发红包了!");
        ArrayList<Integer> readList = manager.send(1000,3);
        member1.receive(readList);
        member2.receive(readList);
        member3.receive(readList);

        manager.display();
        member1.display();
        member2.display();
        member3.display();
    }
}
结果如下

明天学习接口咯!

原文地址:https://www.cnblogs.com/Gazikel/p/13359931.html