- 浏览: 1582787 次
- 性别:
- 来自: 北京
-
文章分类
最新评论
-
nich002:
原网站失效了。撸主简单粗暴的复制过来,可读性极差!差评!
Apache配置详解(最好的APACHE配置教程) -
107x:
不错,谢谢!
LINUX下查看文件夹下的文件个数! -
Hypereo:
好你妹,连个格式都没有!
Apache配置详解(最好的APACHE配置教程) -
resteater:
代码排版感觉有点乱!收发信息代码可读性不强!请问第一次发服务器 ...
java socket例子 -
resteater:
代码排版感觉有点乱!收发信息代码可读性不强!请问第一次发服务器 ...
java socket例子
From: http://blog.csdn.net/zhu_apollo/archive/2007/11/26/1903374.aspx
class Useful
{
int value = 20;
public void f()
{System.out.println("f() in the Useful class");}
public void g()
{System.out.println("g() in the Useful class");}
}
class MoreUseful extends Useful {
int value = 21;
public
void f() {System.out.println("f() in the MoreUseful class");}
public void g()
{System.out.println("g() in the MoreUseful class");}
public void u()
{System.out.println("u() in the MoreUseful class");}
public void v()
{}
public void w() {}
}
class MoreUseful2 extends Useful {
int value = 21;
public
void f() {System.out.println("f() in the MoreUseful2 class");}
public void
g() {System.out.println("g() in the MoreUseful2 class");}
public void u()
{System.out.println("u() in the MoreUseful2 class");}
public void v()
{}
public void w() {}
}
class ExtendsMoreUseful2 extends MoreUseful2 {
int value
= 22;
public void f() {System.out.println("f() in the ExtendsMoreUseful2
class");}
public void g() {System.out.println("g() in the ExtendsMoreUseful2
class");}
public void u() {System.out.println("u() in the ExtendsMoreUseful2
class");}
public void v() {}
public void w() {}
}
public class RTTI {
public static void main(String[] args)
{
//Useful useful = new MoreUseful();
//useful.u();
//这是错误的,u()方法没有在useful类型中调用。
Useful[] x =
{
new
Useful(),
new MoreUseful(),
new MoreUseful2(),
new ExtendsMoreUseful2()
};
//声明一个变量数组,保存每个Useful对象的引用,
//那么每一个Useful对象就会自动向上转型为Useful。
for(int i=0;i<x.length;i++)
{
if(x[i] instanceof
MoreUseful2) //判断instanceof左边的对象是否是右边的类的实例。
{
MoreUseful2 moreuseful2
= (MoreUseful2)x[i];//向下转型(具体解释见下面的分析)
moreuseful2.u();
}
x[i].g(); //这是动态绑定,将方法的调用和方法主体关联起来就是动态绑定。
}
运行结果:
g() in the Useful class // 由于x[0].g()这一句中调用g()方法实际的对象类型是
//
基类Useful类型,故将调用基类中的f()方法。(没有转型)
g() in the MoreUseful class // 由于x[1].g()这一句中调用g()方法实际的对象类型是
//子类Moreuseful类型,故将调用子类Moreuseful中
// 覆盖父 类的g()方法。(向上转型)
u() in the MoreUseful2 class // 由于x[2]是MoreUseful2类型,故可以对其向下转型调
// 用MoreUseful2中的扩展方法u()。(向下转型)
g() in the MoreUseful2 class // 又x[2].g()这一句中调用g()方法实际的对象类型是子
//
类Moreuseful类型,故将调用子类Moreuseful中
// 覆盖父类的g()方法。(向上转型)
u() in the ExtendsMoreUseful2 class // 由于x[3]是ExtendMoreUseful2类型,
// 它是MoreUseful2的子类,存在is-a关系,故可以对其向下转
// 型,将调ExtendMoreUseful2中的扩展的方法u()。(向下转型)
g() in the ExtendsMoreUseful2 class // 又x[3].g()这一句中调用g()方法实际的对象类型
//是子类ExtendMoreuseful类型故将调用
//
子类ExtendMoreuseful中覆盖父类的g()方法。(向上转型)
分析和结论:
(一)向上转型
(1)定义: 把对某个对象的引用视为对其基类引用的做法被称为“向上转型”。
这主要是由于子类的对象可以看成是基类的对象这原因而得来的,也就是具有is-a关系。
比如:
Useful useful = new
MoreUseful();//右边是一个子类的对象,而左边是一个父类类型
//的变量,指向右边的子类对象。
(2)基类可以接收发给导出类的任何消息,因为二者有完全相同的接口,我们只需要
从导出类向上转型,永远不需要知道正在处理的对象的确切类型,这也就是多态性决
定的。利用多态性,具有同样方法名和方法特征的方法根据调用方法的对象的类型,
可以产生不同的动作,这极大地增加了程序员的表达能力。
回头再看一看上面这个例子中的一段for循环代码,
for(int i=0;i<x.length;i++)
{
if(x[i] instanceof
MoreUseful2) //判断instanceof左边的对象是否是右边的类的实例。
{
MoreUseful2 moreuseful2
= (MoreUseful2)x[i]; //向下转型(具体解释见下面的分析)
moreuseful2.u();
}
x[i].g(); //动态绑定
}
主要看x[i].g();这一句话,现在我们还不知道x[i]这个到底是指代哪一个Useful对象,
在这种情况下,编译器是怎么知道调用哪个方法的呢?这是一个动态绑定的问题,见
下面。
(二)动态绑定
(1)定义:将方法的调用和方法主体关联起来就是动态绑定。
比如:x[i].g();这就是一个动态绑定,x[i]是一个对象类型,g()是一个不知道是属于
哪个对象的方法,将这两个两个联合在一起,就是一个绑定。
(2)要注意:Java中除了static和final方法(private方法属于final方法,因为fianl方法
不可以覆盖,static方法是一个全局方法,属于所有类共享,不在多态范围内)之外,
其他所有的方法都是动态绑定,这就意味着在通常情况下,我们不必判定是否应该进
行动态绑定,因为这个会自动发生。
(3)接着上面的答复。编译器是怎么知道调用哪个方法的呢?
主要还是x[i].g();这一句话的作用,x[i]在调用方法的时候,会调用“实际”的方法,这
个实际的方法由所引用的对象的类型决定。那么调用的实际方法可能是父类中没有被
子类覆盖的方法,也可能是子类中覆盖父类的方法,主要看调用这个方法的实际的对
象类型是哪一个。
(三)向下转型
既然有向上转型,那么有没有向下转型呢?
答:有
(1)概述
继承可以确保所有的子类类具有基类的接口,且绝对不会少。那么子类除了有父类的
方法,也可以有自己的额外的新方法(这些方法是基类所没有的),那么一旦向上转
型,就不能调用子类中的新方法,那么能不能用一种方式调用这些新方法呢?当然有
了,这时候就需要向下转型。
(2)向下转型
将超类的引用强制转换为子类类型就叫做向下转型。
注意:将超类的引用赋给为子类类型的变量(没有进行显示地强制转换)是一个编译
错误。
例子:
还是上面的for循环代码
for(int i=0;i<x.length;i++)
{
if(x[i] instanceof
MoreUseful2) // 判断instanceof左边的对象是否是右边的类的实例。
{
MoreUseful2
moreuseful2 = (MoreUseful2)x[i]; // 向下转型
moreuseful2.u();
}
x[i].g();
}
分析:x[i]可以代表具体的Useful对象类型,当它是MoreUseful2或ExtendsMoreUseful2
对象类型时,就可以调用该对象的额外方法u(),v(),w(),也就是当对象x[i]和Moreusful对
象存在is-a关系时,才可以进行向下转型,如果要转换的对象类型与指定的对象类型不
存在is-a关系时,会产生一个ClassCastException异常。
总之:
向下转型时,对象只能强制转换为其本身类型或者其超类类型。比如,
当x[i]ExtendsMoreUseful2对象时,可以把他转换为其本身ExtendsMoreUseful2对象类
型,也可以把它转换为其基类MoreUseful2类型。但是在编译时候还不知道这个x[i]是代
表那个具体对象类型只知道这个x[i]是基类类型引用,所以要用这样的形式" (想要要得
到的类型)x[i] " 进行转换。x[i]在这里是就我这个例子来说明的,你也可以使用其它的
英文代替,其意义是一切符合规定的需要被转换的对象。
下面还有个关于向上转型和向下转型的例子,
abstract class ClassAbstract1{}
class ClassDerived1 extends
ClassAbstract1
{
public void
play1()
{
System.out.println("play1() is in the
ClassDerived1");
}
}
abstract class ClassAbstract2{public abstract
void play2();}
class ClassDerived2 extends ClassAbstract2
{
public
void play2()
{
System.out.println("play2() is in the
ClassDerived2");
}
}
public class E14_UnCast {
public static void
playDemo1(ClassAbstract1
ObjectParameter)
{
((ClassDerived1)ObjectParameter).play1();//向下转型,可以调用导出类中的扩展方法
}
public
static void playDemo2(ClassAbstract2
ObjectParameter)
{
ObjectParameter.play2();//向上转型,可以调用导出类中的覆盖方法
}
/**
* @param args
*/
public static void
main(String[] args) {
// TODO Auto-generated method
stub
ClassAbstract1 classabstract = new
ClassDerived1();
playDemo1(classabstract);
ClassAbstract2
classabstract2 = new ClassDerived2();
playDemo2(classabstract2);
}
}
运行结果:
play1() is in the ClassDerived1
play2() is in
the ClassDerived2
发表评论
-
JVM问题追查与调优
2012-03-27 14:44 1157JDK的几种分析工具 http://liudaoru ... -
NodeJs相关资料
2011-08-18 14:55 3033NodeJs获取参数: proces ... -
jprofiler追踪问题
2011-08-12 18:20 1060Jprofiler下载页: http://www.ej ... -
Linux服务器性能评估与优化【z】
2011-07-01 10:05 1568来自:http://www.itlearner.com/ ... -
Java 理论与实践: 非阻塞算法简介【z】
2011-03-26 20:39 1301From: http://www.ibm.com/develo ... -
Java Crash问题分析[z]
2011-03-23 14:41 5984参考: http://www.ibm.com/develop ... -
Berkeley DB相关
2010-09-25 22:17 1066为什么要使用Berkeley DB,它适合什么场合应用?Ber ... -
熟悉系统方法总结
2010-07-06 14:26 834了解一个陌生的系统是我们经常碰到的事情,下面总结一下自己的一些 ... -
Java缓存框架 EhCache
2010-07-06 14:09 4743From: http://www.oschina.net/p/ ... -
【nio】使用 ServerSocketChannel 实现的 File 服务器[z]
2010-05-21 17:31 3996From: http://www.java2000.net/p ... -
Memcached命令行管理
2010-03-15 11:18 4505From: http://www.exp2up.com/2 ... -
(转)Resin服务器配置指南
2010-01-21 15:35 3507From:http://blog.21cn.com/super ... -
Flickr架构
2010-01-11 09:52 1276From: http://www.cyask.com/ques ... -
JDK的几种分析工具
2009-12-04 12:13 10916From: http://blog.csdn.net/hant ... -
XMemcached——一个新的开源Java memcached客户端
2009-10-23 09:27 1904From: http://www.infoq.com/cn/ ... -
多线程任务调度学习
2009-10-16 13:58 2321昨天找到一套多线程任务调度的代码,相当的不错,先把思路总结一下 ... -
用HSCALE实现MySQL的数据分布式存储
2009-10-15 12:47 3029From:http://www.ningoo.net/ht ... -
马化腾:搜索、电子商务硬仗一定要坚持打
2009-10-15 12:09 1732From:http://www.techweb.com.c ... -
MySQL分表实现上百万上千万记录分布存储的批量查询设计模式【z】
2009-10-15 09:56 3185From:http://hi.baidu.com/jabber ... -
nginx负载均衡和lvs负载均衡的比较分析【z】
2009-10-13 20:02 1489From:http://www.shouker.com/u ...
相关推荐
2. 类型转换:Java支持两种类型转换,向上类型转换(upcast)和向下类型转换(downcast)。向上类型转换是将子类对象转换为父类类型,这种转换是隐式的,安全的。而向下类型转换是将父类对象显式地转换为子类类型,...
Java中的类型转换与多态是面向对象编程的重要概念,它们为程序设计提供了灵活性和扩展性。类型转换允许我们在不同数据类型之间转换,而多态则让代码能够处理多种类型的对象。 首先,我们来讨论类型检查。Java作为一...
在ASP.NET Web窗体项目中,我们可以利用CKEditor 5的API和插件系统来扩展其功能。 接下来,我们要引入highlight.js。这个库支持多种编程语言的语法高亮,并且样式可定制,可以轻松适应不同的网站设计。通过将...
9. **向上或向下切换函数堆栈帧**:`up`和`down`。 ### 断点管理 1. **在匿名空间设置断点**:使用`break *address`。 2. **在程序地址上打断点**:`break address`。 3. **在程序入口处打断点**:`break main`。 ...
级联H桥SVG无功补偿系统在不平衡电网中的三层控制策略:电压电流双闭环PI控制、相间与相内电压均衡管理,级联H桥SVG无功补偿系统在不平衡电网中的三层控制策略:电压电流双闭环PI控制、相间与相内电压均衡管理,不平衡电网下的svg无功补偿,级联H桥svg无功补偿statcom,采用三层控制策略。 (1)第一层采用电压电流双闭环pi控制,电压电流正负序分离,电压外环通过产生基波正序有功电流三相所有H桥模块直流侧平均电压恒定,电流内环采用前馈解耦控制; (2)第二层相间电压均衡控制,注入零序电压,控制通过注入零序电压维持相间电压平衡; (3)第三层相内电压均衡控制,使其所有子模块吸收的有功功率与其损耗补,从而保证所有H桥子模块直流侧电压值等于给定值。 有参考资料。 639,核心关键词: 1. 不平衡电网下的SVG无功补偿 2. 级联H桥SVG无功补偿STATCOM 3. 三层控制策略 4. 电压电流双闭环PI控制 5. 电压电流正负序分离 6. 直流侧平均电压恒定 7. 前馈解耦控制 8. 相间电压均衡控制 9. 零序电压注入 10. 相内电压均衡控制 以上十个关键词用分号分隔的格式为:不
GTX 1080 PCB图纸,内含图纸查看软件
内容概要:本文档详细介绍了利用 DeepSeek 进行文本润色和问答交互时提高效果的方法和技巧,涵盖了从明确需求、提供适当上下文到尝试开放式问题以及多轮对话的十个要点。每一部分内容都提供了具体的示范案例,如指定回答格式、分步骤提问等具体实例,旨在指导用户更好地理解和运用 DeepSeek 提升工作效率和交流质量。同时文中还强调了根据不同应用场景调整提示词语气和风格的重要性和方法。 适用人群:适用于希望通过优化提问技巧以获得高质量反馈的企业员工、科研人员以及一般公众。 使用场景及目标:本文针对所有期望提高 DeepSeek 使用效率的人群,帮助他们在日常工作中快速获取精准的答案或信息,特别是在撰写报告、研究材料准备和技术咨询等方面。此外还鼓励用户通过不断尝试不同形式的问题表述来进行有效沟通。 其他说明:该文档不仅关注实际操作指引,同样重视用户思维模式转变——由简单索取答案向引导 AI 辅助创造性解决问题的方向发展。
基于FPGA与W5500实现的TCP网络通信测试平台开发——Zynq扩展口Verilog编程实践,基于FPGA与W5500芯片的TCP网络通信测试及多路Socket实现基于zynq开发平台和Vivado 2019软件的扩展开发,基于FPGA和W5500的TCP网络通信 测试平台 zynq扩展口开发 软件平台 vivado2019.2,纯Verilog可移植 测试环境 压力测试 cmd命令下ping电脑ip,同时采用上位机进行10ms发包回环测试,不丢包(内部数据回环,需要时间处理) 目前实现单socket功能,多路可支持 ,基于FPGA; W5500; TCP网络通信; Zynq扩展口开发; 纯Verilog可移植; 测试平台; 压力测试; 10ms发包回环测试; 单socket功能; 多路支持。,基于FPGA与W5500的Zynq扩展口TCP通信测试:可移植Verilog实现的高效网络通信
Labview液压比例阀伺服阀试验台多功能程序:PLC通讯、液压动画模拟、手动控制与调试、传感器标定、报警及记录、自动实验、数据处理与查询存储,报表生成与打印一体化解决方案。,Labview液压比例阀伺服阀试验台多功能程序:PLC通讯、液压动画模拟、手动控制与调试、传感器标定、报警管理及实验自动化,labview液压比例阀伺服阀试验台程序:功能包括,同PLC通讯程序,液压动画,手动控制及调试,传感器标定,报警设置及报警记录,自动实验,数据处理曲线处理,数据库存储及查询,报表自动生成及打印,扫码枪扫码及信号录入等~ ,核心关键词:PLC通讯; 液压动画; 手动控制及调试; 传感器标定; 报警设置及记录; 自动实验; 数据处理及曲线处理; 数据库存储及查询; 报表生成及打印; 扫码枪扫码。,Labview驱动的智能液压阀测试系统:多功能控制与数据处理
华为、腾讯、万科员工职业发展体系建设与实践.pptx
1.版本:matlab2014/2019a/2024a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。
电网不对称故障下VSG峰值电流限制的柔性控制策略:实现电流平衡与功率容量的优化利用,电网不对称故障下VSG峰值电流限制的柔性控制策略:兼顾平衡电流与功率控制切换的动态管理,电网不对称故障下VSG峰值电流限制的柔性不平衡控制(文章完全复现)。 提出一种在不平衡运行条件下具有峰值电流限制的可变不平衡电流控制方法,可灵活地满足不同操作需求,包括电流平衡、有功或无功恒定运行(即电流控制、有功控制或无功控制之间的相互切),注入电流保持在安全值内,以更好的利用VSG功率容量。 关键词:VSG、平衡电流控制、有功功率控制、无功功率控制。 ,VSG; 峰值电流限制; 柔性不平衡控制; 电流平衡控制; 有功功率控制; 无功功率控制。,VSG柔性控制:在电网不对称故障下的峰值电流限制与平衡管理
1、文件内容:libpinyin-tools-0.9.93-4.el7.rpm以及相关依赖 2、文件形式:tar.gz压缩包 3、安装指令: #Step1、解压 tar -zxvf /mnt/data/output/libpinyin-tools-0.9.93-4.el7.tar.gz #Step2、进入解压后的目录,执行安装 sudo rpm -ivh *.rpm 4、更多资源/技术支持:公众号禅静编程坊
数据集是一个以经典动漫《龙珠》为主题的多维度数据集,广泛应用于数据分析、机器学习和图像识别等领域。该数据集由多个来源整合而成,涵盖了角色信息、战斗力、剧情片段、台词以及角色图像等多个方面。数据集的核心内容包括: 角色信息:包含《龙珠》系列中的主要角色及其属性,如名称、种族、所属系列(如《龙珠》《龙珠Z》《龙珠超》等)、战斗力等级等。 图像数据:提供角色的图像资源,可用于图像分类和角色识别任务。这些图像来自动画剧集、漫画和相关衍生作品。 剧情与台词:部分数据集还包含角色在不同故事中的台词和剧情片段,可用于文本分析和自然语言处理任务。 战斗数据:记录角色在不同剧情中的战斗力变化和战斗历史,为研究角色成长和剧情发展提供支持。 数据集特点 多样性:数据集整合了角色、图像、文本等多种类型的数据,适用于多种研究场景。 深度:不仅包含角色的基本信息,还涵盖了角色的成长历程、技能描述和与其他角色的互动关系。 实用性:支持多种编程语言(如Python、R)的数据处理和分析,提供了详细的文档和示例代码。
基于protues仿真的多功公交站播报系统设计(仿真图、源代码) 该设计为基于protues仿真的多功公交站播报系统,实现温度显示、时间显示、和系统公交站播报功能; 具体功能如下: 1、系统使用51单片机为核心设计; 2、时钟芯片进行时间和日期显示; 3、温度传感器进行温度读取; 4、LCD12864液晶屏进行相关显示; 5、按键设置调节时间; 6、按键设置报站; 7、仿真图、源代码; 操作说明: 1、下行控制报站:首先按下(下行设置按键),(下行指示灯)亮,然后按下(手动播报)按键控制播报下一站; 2、上行控制报站:首先按上(上行设置按键),(上行指示灯)亮,然后按下(手动播报)按键控制播报下一站; 3、按下关闭播报按键,则关闭播报功能和清除显示
采用Java后台技术和MySQL数据库,在前台界面为提升用户体验,使用Jquery、Ajax、CSS等技术进行布局。 系统包括两类用户:学生、管理员。 学生用户 学生用户只要实现了前台信息的查看,打开首页,查看网站介绍、琴房信息、在线留言、轮播图信息公告等,通过点击首页的菜单跳转到对应的功能页面菜单,包括网站首页、琴房信息、注册登录、个人中心、后台登录。 学生用户通过账户账号登录,登录后具有所有的操作权限,如果没有登录,不能在线预约。学生用户退出系统将注销个人的登录信息。 管理员通过后台的登录页面,选择管理员权限后进行登录,管理员的权限包括轮播公告管理、老师学生信息管理和信息审核管理,管理员管理后点击退出,注销登录信息。 管理员用户具有在线交流的管理,琴房信息管理、琴房预约管理。 在线交流是对前台用户留言内容进行管理,删除留言信息,查看留言信息。
MATLAB可以用于开发人脸识别考勤系统。下面是一个简单的示例流程: 1. 数据采集:首先收集员工的人脸图像作为训练数据集。可以要求员工提供多张照片以获得更好的训练效果。 2. 图像预处理:使用MATLAB的图像处理工具对采集到的人脸图像进行预处理,例如灰度化、裁剪、缩放等操作。 3. 特征提取:利用MATLAB的人脸识别工具包,如Face Recognition Toolbox,对处理后的图像提取人脸特征,常用的方法包括主成分分析(PCA)和线性判别分析(LDA)等。 4. 训练模型:使用已提取的人脸特征数据集训练人脸识别模型,可以选择支持向量机(SVM)、卷积神经网络(CNN)等算法。 5. 考勤系统:在员工打卡时,将摄像头捕获的人脸图像输入到训练好的模型中进行识别,匹配员工信息并记录考勤数据。 6. 结果反馈:根据识别结果,可以自动生成考勤报表或者实时显示员工打卡情况。 以上只是一个简单的步骤,实际开发过程中需根据具体需求和系统规模进行定制和优化。MATLAB提供了丰富的图像处理和机器学习工具,是开发人脸识别考勤系统的一个很好选择。
hjbvbnvhjhjg
HCIP、软考相关学习PPT提供下载
绿豆BOX UI8版:反编译版六个全新UI+最新后台直播管理源码 最新绿豆BOX反编译版六个UI全新绿豆盒子UI8版本 最新后台支持直播管理 作为UI6的升级版,UI8不仅修复了前一版本中存在的一些BUG,还提供了6套不同的UI界面供用户选择,该版本有以下特色功能: 在线管理TVBOX解析 在线自定义TVBOX 首页布局批量添加会员信息 并支持导出批量生成卡密 并支持导出直播列表管理功能