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 }