java抽象类和抽象方法[通俗易懂]

java抽象类和抽象方法[通俗易懂]1.抽象的概念2.抽象类和抽象方法的使用1//抽象方法和抽象类的格式:2/*抽象方法:就是加上abstract关键字,然后去掉大括号,直接分号结束;3抽象类:抽象方法所在的类,必须是抽象

大家好,又见面了,我是你们的朋友全栈君。

1.抽象的概念

java抽象类和抽象方法[通俗易懂]

 

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.抽象方法和抽象类的注意事项

java抽象类和抽象方法[通俗易懂]

 

 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.继承综合练习

java抽象类和抽象方法[通俗易懂]

 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 }

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/155750.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号