1. 程式人生 > 其它 >java抽象類和抽象方法

java抽象類和抽象方法

1.抽象的概念

 

2.抽象類和抽象方法的使用

 1 //抽象方法和抽象類的格式:
 2 /*抽象方法:就是加上abstract關鍵字,然後去掉大括號,直接分號結束;
 3 抽象類:抽象方法所在的類,必須是抽象類才行,在class之前的寫上abstract即可。
 4 
 5 如何使用抽象類和抽象方法
 6 1.不能直接建立(new)抽象類物件
 7 2.必須用一個子類來繼承抽象父類
 8 3.子類必須覆蓋重寫抽象父類當中所有的抽象方法
 9 覆蓋重寫實現:子類去掉抽象方法的abstract關鍵字,然後補上方法體大括號
10 4.建立子類物件進行使用*/
11 
12 public abstract
class Animals { 13 //這是一個抽象方法,代表吃東西,但是具體吃什麼(大括號的內容)不確定 14 public abstract void eat(); 15 //這是普通的成員方法 16 public void normalMethod(){ 17 System.out.println("這是普通成員方法"); 18 19 } 20 } 21 22 23 24 public class Cat extends Animals{ 25 @Override//父類抽象方法的重寫 26 public void eat(){
27 System.out.println("貓吃魚"); 28 } 29 } 30 31 32 public class DemoAbstract { 33 public static void main(String[] args) { 34 Cat cat = new Cat(); 35 cat.eat(); 36 cat.normalMethod(); 37 } 38 }

3.抽象方法和抽象類的注意事項

 

 3.1

 1 //抽象類中,可以有構造方法,是供子類建立物件時,初始化父類成員使用的
 2
3 public abstract class Fu001 { 4 public Fu001(){ 5 System.out.println("父類抽象類構造方法執行"); 6 } 7 public void normalMethod(){ 8 System.out.println("普通成員方法"); 9 } 10 11 public abstract void eat(); 12 } 13 14 15 public class Zi001 extends Fu001 { 16 public Zi001(){ 17 //super(); 18 System.out.println("子類抽象方法執行"); 19 } 20 @Override 21 public void eat(){ 22 System.out.println("孩子吃飯"); 23 } 24 } 25 26 27 public class DemoFuZi { 28 public static void main(String[] args) { 29 Zi001 zi = new Zi001(); 30 zi.eat(); 31 zi.normalMethod(); 32 } 33 }

3.2抽象類中的子類,必須重寫抽象父類中所有的抽象方法,否則編輯無法通過會報錯。除非該子類也是抽象類。

 1 //最高的抽象父類
 2 public abstract class Animal {
 3     public abstract void eat();
 4     public abstract void sleep();
 5 }
 6 
 7 
 8 public abstract class Dog extends Animal{  //該子類也是抽象類,不用重寫所有父類方法
 9     @Override
10     public void eat(){
11         System.out.println("狗啃骨頭");
12     }
13 
14 }
15 
16 
17 public class DogGolden extends Dog {
18     @Override
19     public void sleep(){
20         System.out.println("呼呼呼");
21     }
22 }
23 
24 public class Ha2 extends Dog{
25     @Override
26     public void sleep(){
27         System.out.println("嘿嘿嘿");
28     }
29 }

4.繼承綜合練習

 1 package RedListTest;/*
 2  *@Author:lcc
 3  *@Date:2022/3/13-03-13-16:07
 4  *@Description:RedListTest
 5  *@version:1.0
 6  */
 7 
 8 public class User {
 9     private String name;
10     private int money;
11 
12     public User(){
13 
14     }
15 
16     public User(String name, int money) {
17         this.name = name;
18         this.money = money;
19     }
20 
21     public void show(){
22         System.out.println("我叫"+name+",總共有"+money+"元");
23     }
24 
25     public String getName() {
26         return name;
27     }
28 
29     public void setName(String name) {
30         this.name = name;
31     }
32 
33     public int getMoney() {
34         return money;
35     }
36 
37     public void setMoney(int money) {
38         this.money = money;
39     }
40 }
 1 package RedListTest;/*
 2  *@Author:lcc
 3  *@Date:2022/3/13-03-13-16:17
 4  *@Description:RedListTest
 5  *@version:1.0
 6  */
 7 
 8 import java.util.ArrayList;
 9 //群主的類
10 public class Manager extends User{
11     public Manager(){
12 
13     }
14     public Manager(String name, int age) {
15         super(name, age);
16     }
17     public ArrayList<Integer> send(int totalMoney,int count){
18         //首先要有一個集合,用來儲存若干個紅包的金額
19         ArrayList<Integer> redList = new ArrayList<>();
20         //首先看一下自己有多少錢
21         int leftMoney = super.getMoney();
22         if(totalMoney> leftMoney){
23             System.out.println("對不起,餘額不足");
24             return redList; //返回空集合
25         }
26         //扣錢就是重新設定餘額
27         super.setMoney(leftMoney-totalMoney);
28 
29         //發紅包需要平均拆分為count份
30         int avg = totalMoney / count;
31         int mod = totalMoney % count;  //分完剩下的零頭
32 
33         //除不開的零頭,包在最後一個紅包中
34         //下面把紅包一個一個放到集合裡
35         for (int i = 0; i < count-1; i++) {
36             redList.add(avg);
37         }
38         //最後一個紅包
39         int last = avg+mod;
40         redList.add(last);
41 
42         return redList;
43 
44     }
45 
46 }
package RedListTest;/*
 *@Author:lcc
 *@Date:2022/3/13-03-13-16:53
 *@Description:RedListTest
 *@version:1.0
 */

import java.util.ArrayList;
import java.util.Random;

public class Member extends User {
    public Member() {
    }

    public Member(String name, int member) {
        super(name, member);
    }

    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);
    }
}
 1 package RedListTest;/*
 2  *@Author:lcc
 3  *@Date:2022/3/13-03-13-17:01
 4  *@Description:RedListTest
 5  *@version:1.0
 6  */
 7 
 8 import java.util.ArrayList;
 9 
10 public class MainRedPacket {
11     public static void main(String[] args) {
12         Manager manager  = new Manager("群主",100);
13         Member one = new Member("成員A",0);
14         Member two = new Member("成員B",0);
15         Member three = new Member("成員C",0);
16 
17         manager.show();
18         one.show();
19         two.show();
20         three.show();
21         System.out.println("______________");
22         //群主總共發20塊錢,分成3分。
23         ArrayList<Integer> redList = manager.send(20,3);
24         //三個普通成員收紅包
25         one.receive(redList);
26         two.receive(redList);
27         three.receive(redList);
28 
29         manager.show();
30         one.show();
31         two.show();
32         three.show();
33 
34 
35     }
36 }