首页 > 编程语言 >java抽象类和抽象方法

java抽象类和抽象方法

时间:2023-09-21 18:01:59浏览次数:45  
标签:13 java name int void class 抽象 抽象类 public

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抽象类和抽象方法_抽象方法_02

 

 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抽象类和抽象方法_抽象类_03

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 }

 



标签:13,java,name,int,void,class,抽象,抽象类,public
From: https://blog.51cto.com/u_16082673/7555774

相关文章

  • java开发之个人微信的二次开发
    简要描述:设置个人头像请求URL:http://域名地址/sendHeadImage请求方式:POST请求头Headers:Content-Type:application/jsonAuthorization:Authorization值(登录获取码信息接口中返回的认证信息值)参数:参数名必选类型说明wId是string登录实例标识path是string图片url链接返回数据:参数名类型......
  • org/springframework/boot/maven/RepackageMojo has been compiled by a more recent
    项目场景:项目中执行clean,再执行install时报错,错误如下org/springframework/boot/maven/RepackageMojohasbeencompiledbyamorerecentversionoftheJavaRuntime(classfileversion61.0),thisversionoftheJavaRuntimeonlyrecognizesclassfileversionsupt......
  • java日期时间类现在(java8及以后版本)推荐使用java.time 包中的类
    以下信息由AI模型"文心一言"提供,仅供参考:在Java8之后,推荐使用新的日期和时间API,即java.time包中的类。主要有以下原因:更好的设计和功能:新的日期和时间API在设计和功能上都更优。它包括时间、日期、时间间隔等更全面的表示,并支持更准确的计算和格式化。更全面的时间......
  • JavaScript实现数组对象去重
    有多种实现方式:一、使用 Set 对象:1Array.from(new Set(array))该方法会先创建一个 Set 对象,然后再使用 Array.from 方法将 Set 对象转换为数组,因为 Set 对象不允许有重复的元素,所以这样可以实现去重的效果。但是,如果数组中的元素是对象,Set 对......
  • java定时器
    好多朋友用过Windows的任务计划,也有不少程序迷自己曾写过时钟报警、系统自动关机等趣味程序,可却很少有朋友在Web工程中实现过类似功能。  有人说Timer只能规定从现在开始的多长时间后,每隔多久做一次事或在什么时间做一次事,那我想在每月1号或每天12点做一项工作如何做呢?你只要......
  • HBase(扫描HBase表的数据转化为对应的类Java代码)
    Msg实体类packagecom.xxxx.test01;publicclassMsg{privateStringname;privateStringbumen;privateStringaddress;privateStringdiyu;privateStringwangzhi;privateStringemail;privateStringdaibiao;privateStr......
  • MySQL数据库查询对象空值判断与Java代码示例【含面试题】
    AI绘画关于SD,MJ,GPT,SDXL百科全书面试题分享点我直达2023Python面试题2023最新面试合集链接2023大厂面试题PDF面试题PDF版本java、python面试题项目实战:AI文本OCR识别最佳实践AIGamma一键生成PPT工具直达链接玩转cloudStudio在线编码神器玩转GPUAI绘画、AI讲话、......
  • Java(day20):泛型和枚举
    前言Java是一种面向对象的、跨平台的编程语言,在软件开发中应用广泛。在Java中,泛型和枚举是两种重要的特性,它们能够提高代码的可读性和重用性。本文将介绍Java泛型和枚举的概念、语法、使用方法、测试用例等方面。摘要泛型是Java的一种抽象类型,它允许使用者在编写代码时不指定数......
  • 资深java面试题及答案整理
    编写Java程序时,如何在Java中创建死锁并修复它?经典但核心Java面试问题之一。如果你没有参与过多线程并发Java应用程序的编码,你可能会失败。如何避免Java线程死锁?如何避免Java中的死锁?是Java面试的热门问题之一,也是多线程的编程中的重口味之一,主要在招高级程序员时......
  • java通过连接ssh来实现postgres数据库的数据备份
    引入依赖<dependency><groupId>com.jcraft</groupId><artifactId>jsch</artifactId><version>0.1.54</version><scope>compile</scope></dependency&g......