1. 程式人生 > 實用技巧 >Java日誌第17天 2020.7.22

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

結果如下

明天學習介面咯!