java之旅 (六)接口

C#的接口 vs Java的接口:谁更古老? 文章摘要 Java与C#的接口功能对比:Java接口诞生于1996年(1.0版本),支持多重继承和完全抽象;C#接口则于2000年随.NET发布,语法更简洁。Java比C#早4年实现接口功能,但两者后期均迭代增强(如Java 8加入默认方法,C# 8支持默认接口方法)。核心差异在于Java早期强调严格抽象,而C#更注重与.NET生态整合。(149字) 阅读详情

interface关键词进一步强化了abstract的概念。你可以把它想成“纯的”abstract类。它能让开发人员定义类的形式:方法名,参数列表,返回值的类型,但是却没有方法的正文。interface也可以包括数据成员,但是它天生就是static和final的。interface只提供形式,不谈实现。

 

要创建一个实现了某个(或者某组)interface的类,就必须使用implements关键词。它的意思是,“interface要告诉你‘类长什么样子’,implements要告诉你‘它是怎么工作的’”

 

你可以把interface里的方法声明成public的,但是即便不讲,它们也是public的(这是自动的)。所以当你implements一个interface的时候,你必须把这个interface的方法定义成public的。(除非你有特殊的用途要定义成其他的)

 

java的“多重继承”:

java并不强制你一定要去继承abstract还是“具体”的类,但是你只能继承一个非interface的类。但是你可以根据据需要实现任意多个interface,这样你就能创建一个类似c++中“多重继承”的类。

 

接口的真正目的:能够上传到多个基本类型。接口的令一个作用是和“把abstact类用作基类”完全相同的:就是要禁止客户程序员去创建这个类的对象,并且重申这是一个接口。

 

到底是用interface还是abstract类?

interface既给了你abstract类的好处,又给了你interface的好处,因此只要基类的设计里面可以不包括方法和成员变量的定义,你就应该优先使用interface。

 

接口继承:

通常情况下,extends只能用于类,但是由于一个interface可以由多个接口拼接而成,因此创建新的一个interface的时候可以使用extends来表示其多个“基接口”。

//////////////////////////////////////////////////////////////////////////////////////////////////

interface Monster 
   
{
   
  void menace();
   
}
   

  
    
  
interface DangerousMonster extends Monster 
   
{
   
  void destroy();
   
}
   

  
    
  
interface Lethal
   
{
   
  void kill();
   
}
   

  
    
  
interface Vampire extends DangerousMonster, Lethal
   
{
   
  void drinkBlood();
   
}
   

  
    
  

///////////////////////////////////////////////////////////////////////////////////////////////

 

常量的分组:由于interface数据成员自动就是static和final  的,因此interface是一种非常方便的,创建一组常量值的工具,这点同c和c++里的enum很类似。例如:

///////////////////////////////////////////////////////////////////////////////////////////////////

public interface Months

{

  int

    JANUARY = 1, FEBRUARY = 2, MARCH = 3,

    APRIL = 4, MAY = 5, JUNE = 6, JULY = 7,

    AUGUST = 8, SEPTEMBER = 9, OCTOBER = 10,

    NOVEMBER = 11, DECEMBER = 12;

}

////////////////////////////////////////////////////////////////////////////////////////////////////////

为了安全期间可以把上面封到一个包里,不过最终你得到的只是一个int,看起来还是不如enum安全。不过抛开interface,我们可以创建一个final类,定义上一些static final的对象就没问题了。

提示:1,There’s also a month field in java.util.Calendar.

2,Apache的Jakarta Commons项目下包含了一些创建枚举类型的工具,参见http://jakarta.apache.org/commons,下面的 “lang,”在org.apache.commons.lang.enum.这个包里。 这个项目里面还有一些别的有用的类库。

【第三只眼:Oracle通过归档日志查看系统的业务高峰sql】 根据oracle归档的业务高峰量,查找业务sql,进行优化 阅读详情

相关推荐

TSEND_C指令错误代码解析与实战排错指南

本文详细解析西门子PLC中TSEND_C指令的常见错误代码,包括连接建立、参数配置、资源限制和网络通信等错误类型。针对错误代码80C4等典型问题提供实战排错指南,帮助工程师快速诊断和解决工业通信中的连接故障,提升系统可靠性。

backprop5master的博客 414

.RibbonLoadBalancerClient does not define or inherit an implementation of the resolved method

问题详情: 在使用nacos及openFeign进行跨服调用时出现: 2021-05-10 15:01:51.794 ERROR 11348 --- [io-10050-exec-1] o.a.c.c.C.[.[.[/].[dispatcherServlet] : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Handler dispatch failed; nest

y368769的博客 4124

【Ubuntu】SMBus Host controller not enabled(虚拟机进入不了图形界面)

SMBus Host controller not enabled(虚拟机进入不了图形界面)

Cappuccino Blog 4万+

Receiver class com.mchange.v2.c3p0.impl.NewProxyResultSet does not define or inherit an implementati

HTTP Status 500 – Internal Server Error Type 异常报告 消息 Handler dispatch failed; nested exception is java.lang.AbstractMethodError: Receiver class com.mchange.v2.c3p0.impl.NewProxyResultSet does not defi...

weixin_45328645的博客 3221

ABP多租户实现

abp会调用ITenantStore.Find(Guid)方法去查tenant是否存在。要骗过abp就得自己实现ITenantStore并替换原来的实现。abp会自动解jwt里的tenant id,并且尝试验证它。这时候我们之前实现的ITenantStore就可以骗过abp。你要不想骗它也成,反正这个类是可以依赖注入的,你爱咋验证就咋验证。不用open id dict,只用jwt,让abp轻起来。在原来生成jwt的地方加入tenantId。module上也要加DependsOn。

m0_46704355的博客 473

山景BP10_128DBG开发板ADC_Key驱动

最近在学习山景BP10_128DBG开发板,想使用开发板上的按键。看了看原理图和之前用过的按键好像有点不一样。常见的按键都是判断IO口是否被拉低或拉高来判断按键是否被按下。山景BP10_128DBG开发板上的按键是ADC按键,每个按键按下之后ADC的采样值是不同的,通过ADC采样回来的值进而判断哪个按键按下。这种方式核心思想就是用一个ADC通道来节约IO口,对于IO紧张的芯片是一个不错的解决思路。

weixin_56646002的博客 1311

java.lang.AbstractMethodError 启动过滤器异常解决过程

java.lang.AbstractMethodError 启动过滤器异常解决过程

ymmyym的博客 3855

保姆级教程:在爱快iKuai虚拟机里装OpenWrt旁路由,实现去广告和特殊功能

本文提供在爱快iKuai虚拟机中安装OpenWrt旁路由的详细教程,帮助用户实现去广告和特殊功能扩展。通过分步指导,包括虚拟机配置、网络设置和功能优化,打造稳定高效的家庭网络环境,特别适合软路由爱好者和网络管理员。

weixin_31364787的博客 830

java.lang.AbstractMethodError: Receiver class org.springframework.cloud.netflix.ribbon.RibbonLoadBal

java.lang.AbstractMethodError: Receiver class org.springframework.cloud.netflix.ribbon.RibbonLoadBalancerClient does not define or inherit an implementation of the resolved method 'abstract org.springframework.cloud.client.ServiceInstance choose(java.lang.

田埂、の技术博客 5169

基于NSGA2算法的无人机三维路径规划MATLAB实现

传统的路径规划方法多采用启发式搜索算法,然而这些方法往往带着局限性,不能有效地克服无人机飞行任务中所遇到的复杂环境与约束。而基于遗传算法的NSGA2(Non-dominated Sorting Genetic Algorithm II)方法则可以在优化目标之间找到最好的平衡点,是一种十分优秀的解决方案。本文介绍了基于NSGA2算法的无人机三维路径规划MATLAB实现。NSGA2算法是一种多目标优化算法,通过非支配排序和拥挤度距离来评估个体的适应度和选择新个体,从而产生一组非支配解。3.选择新个体组成P1;

CyberLynxX的博客 982

手把手教你完成YOLOv8分类识别界面搭建,使用Qt6设计YOLOv8分类识别系统,前台系统+后台管理系统开发实战,全网最详细教程

本项目基于YOLOv8分类模型,结合PySide6框架开发了一套图形化分类识别系统,支持图片、视频和摄像头实时检测。系统包含以下功能: 分类识别模块:完成图像/视频目标分类,界面展示检测结果。 用户管理模块:支持登录注册、头像修改、密码重置等功能。 AI问答模块:集成DeepSeek大模型接口,实现流式输出对话。 后台管理系统(第二版新增):管理员可管理用户信息及个人中心。 系统采用MySQL数据库存储用户数据,并提供完整的UI界面与交互逻辑。代码已开源,适用于毕业设计或快速部署场景。

在职AI算法工程师,擅长计算机视觉,YOLO目标检测、分割等,擅长web、pyqt界面可视化,好内容持续更新中,来这里跟大家一起学习,共同进步 826

COM学习笔记三四《COM技术内幕》--接口和QueryInterface函数

实现了§2和§3的简单的程序,这些程序并不是完全意义上的COM程序。§2 —— IFACE.CPP代码清单: // //Iface.cpp // // #include #i

dengrk的专栏 723

DeepSeek邮件管理全攻略

DeepSeek邮件助手是一款高效的邮件处理工具,提供智能分类、撰写、回复和任务自动化功能。通过API调用或多智能体系统,它能自动分类邮件意图、生成专业回复并优化邮件内容。核心功能包括智能过滤、会议安排和任务提醒,支持与主流邮箱服务集成。提供精准提示词模板,帮助用户快速生成得体邮件,提升工作效率。适合个人和企业使用,通过简单配置即可实现邮件处理自动化。

Genio_Wang的博客 181

菜鸟之旅——Java入门篇(六)接口

抽象类   用关键字abstract 修饰的类称为抽象类(abstract类)。例如:             abstract class A{                     ..............            }   抽象类有如下特点: (1)抽象类中可以有抽象方法   与普通的类相比,抽象类可以有抽象方法(abstract方法),也可以有非抽象方法。

月色荒凉了天明 857

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

Java从入门到“放弃”(精通)之旅——抽象类和接口⑨

本文将深入探讨抽象类和接口的核心概念、语法规则、使用场景以及它们之间的区别,并通过丰富的代码示例帮助读者全面掌握这些知识点。

此人很懒,什么都留下了...快进来看看吧 2455

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

Java的编程之旅29——Interface接口

接口的定义,接口与抽象联合使用,一个类继承多个接口,继承一个类同时继承多个接口

weixin_62621407的博客 1251

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

Hello,World驱动之旅java层jni接口调用(四)

1.Linux下一切皆是文件2.通过系统调用open、read、write对驱动文件节点进行读写操作3.注意驱动生成节点文件的权限。

Hello,Wrold 1554

Java函数式接口:编程美学的革新之旅

在Java中,函数式接口是指只包含一个抽象方法的接口。尽管它们可以包含多个默认或静态方法,但抽象方法只能有一个。这个定义使得函数式接口成为Lambda表达式的理想目标类型。虽然Java提供了多种内置的函数式接口,但在某些情况下,创建自定义的函数式接口可能更适合特定的需求。自定义函数式接口允许开发者定义一个明确的合同,确保Lambda表达式或方法引用符合特定的操作签名。// 输出 8// 输出 15。

Von_016's Blog 972

Java学习之旅第二季-16:接口

本小节详细介绍了Java接口的概念、特性及使用方法。接口作为一种抽象数据类型,通过声明抽象方法支持动态方法解析,有效解决类层次结构僵化问题。文章阐述了接口的声明语法、成员类型(包括常量属性、抽象方法、静态方法、默认方法和私有方法)。最后介绍了接口的两种使用方式:接口继承(extends)和类实现(implements),并说明具体类和抽象类在实现接口时的不同要求。全文系统性地梳理了Java接口的核心知识点,为理解面向对象编程中的接口机制提供了完整参考。

摸鱼的老谭 1018

Java之旅:使用Hprose调用Golang的接口

使用Hprose调用Golang的接口 Java跨语言调用Golang的接口,一般来说 不同的工程之间通信都是需要一些小小的帮助的 这里我们隆重邀请到Hprose来帮我们讲解一下是如何实现的 哈? Hprose是谁 Hprose是一款先进的轻量级、跨语言、跨平台、无侵入式、高性能动态远程对象调用引擎库啦 这都不知道 你是真的菜 哈哈哈 废话不多说 我们进入正题 直接上代码 定义客户端 import hprose.client.HproseClient; public class Hprose

阿树的博客 590

Java接口–历年来Java 9之旅–默认和私有方法

介绍 Java的接口在Java版本的基础上进行了更多的改进,在Java 8和Java 9方面也是如此。在本文中,我们将研究接口在Java 8之前的样子以及如何在Java 8和Java 9中进行增强。 Java 8之前的接口 接口将具有一个或多个抽象方法,如下所示: public interface MyInterface { public void doSomething(); }...

最佳 Java 编程 236

【Java之旅】 11. 抽象类与接口

【Java之旅】 11. 抽象类与接口 11.1 final关键字 在Java中,final关键字可以用于修饰类、方法和变量 a. 修饰类 当我们用final关键字去修饰一个类时,那么这个类就会断子绝孙。他将不能被其他的类继承. public class Finaltest { public static void main(String[] args) { Players kupurk = new Players(); System.out.println(kupurk.id); } }

hmmm? 292

Java学习之旅(六)

向高薪出发:Java学习之旅(六) 第三周Java学习—前五章检测练习 从1开始累加,和超过10000时的数值为多少? int sum = 0; for (int i = 1; ; i++) { sum+=i; if (sum>10000){ System.out.println(i); break; } } ...

zzzinsser的博客 195

黑马程序员 Java 最新教程:开启你的编程之旅

黑马程序员 Java 最新教程:开启你的编程之旅 【下载地址】黑马程序员Java最新教程 黑马程序员 Java 最新教程欢迎来到黑马程序员的 Java 最新教程资源页面 项目地址: https://gitcode.com/Reso...

gitblog_06512的博客 617

Java学习之旅第三季-6:泛型接口

本小节介绍了Java中泛型接口的使用方法。主要内容包括:1)泛型接口的声明语法,支持多个类型参数;2)类实现泛型接口的几种方式(非泛型类可继承原始类型或指定具体类型,泛型类可继承原始类型、指定类型或使用子类类型参数);3)接口继承泛型接口的规则与类实现类似;4)类型推导机制及钻石语法的支持;5)不支持泛型的类型(异常类、匿名内部类、枚举);6)泛型与数组的限制。泛型接口提高了代码复用性和类型安全性,是Java泛型体系的重要组成部分。

摸鱼的老谭 972

【Java面向对象】java学习之旅17-接口

定义: 表示一种能力或者规范 使用: 使用interface关键字声明接口 接口中可以声明常量、抽象方法、静态方法、默认实现的方法 用implements关键字实现接口 实现类中需要重写实现所有的抽象方法,也可以重写接口中默认实现的方法 一个简单的接口实例: //接口的声明用interface,可以继承多个接口 public interface MyInterface extends MyFaterInterface, MyFaterInterface2 { //接口中可以定义的有:

JeffHan^_^的博客 498
上一篇: java之旅 (五)多态性
下一篇: 深入探索C++对象模型 之 Data语意学
C_plus_learner
博客等级 码龄22年 0粉丝 9原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值