java抽象類和抽象方法
阿新 • • 發佈:2022-03-13
1.抽象的概念
2.抽象類和抽象方法的使用
1 //抽象方法和抽象類的格式: 2 /*抽象方法:就是加上abstract關鍵字,然後去掉大括號,直接分號結束; 3 抽象類:抽象方法所在的類,必須是抽象類才行,在class之前的寫上abstract即可。 4 5 如何使用抽象類和抽象方法 6 1.不能直接建立(new)抽象類物件 7 2.必須用一個子類來繼承抽象父類 8 3.子類必須覆蓋重寫抽象父類當中所有的抽象方法 9 覆蓋重寫實現:子類去掉抽象方法的abstract關鍵字,然後補上方法體大括號 10 4.建立子類物件進行使用*/ 11 12 public abstractclass 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 //抽象類中,可以有構造方法,是供子類建立物件時,初始化父類成員使用的 23 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 }