- 浏览: 1582869 次
- 性别:
- 来自: 北京
-
文章分类
最新评论
-
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 1733From: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`。 ...
DeepSeek与AI幻觉-清华大学团队制作 一、什么是AI幻觉 (定义与基础概念) 二、DeepSeek为什么会产生幻觉 (聚焦特定AI模型的幻觉成因分析) 三、AI幻觉评测 (评估AI幻觉的频率、类型与影响的方法) 四、如何减缓AI幻觉 (解决方案与技术优化方向) 五、AI幻觉的创造力价值 (探讨幻觉在创新场景中的潜在益处,如艺术生成、灵感激发等)
协同过滤算法商品推荐系统(源码+数据库+论文+ppt)java开发springboot框架javaweb,可做计算机毕业设计或课程设计 【功能需求】 前台用户可以实现注册登录、商品浏览,在线客服,加入购物车,加入收藏,下单购买,个人信息管理,收货信息管理,收藏管理,评论功能。 后台管理员可以进行用户管理、商品分类管理、商品信息管理、订单评价管理、系统管理、订单管理。 【环境需要】 1.运行环境:最好是java jdk 1.8,我们在这个平台上运行的。其他版本理论上也可以。 2.IDE环境:IDEA,Eclipse,Myeclipse都可以。 3.tomcat环境:Tomcat 7.x,8.x,9.x版本均可 4.数据库:MySql 5.7/8.0等版本均可; 【购买须知】 本源码项目经过严格的调试,项目已确保无误,可直接用于课程实训或毕业设计提交。里面都有配套的运行环境软件,讲解视频,部署视频教程,一应俱全,可以自己按照教程导入运行。附有论文参考,使学习者能够快速掌握系统设计和实现的核心技术。
MES系统数字化工厂解决方案.pptx
MUI调用照片以及裁剪和图库照片上传到服务器
GPT付费体验系统最新版系统是一款基于ThinkPHP框架开发的AI问答小程序, 是基于国外很火的ChatGPT进行开发的Ai智能问答小程序。这是一种基于人工智能技术的问答系统, 可以实现智能回答用户提出的问题。相比传统的问答系统,ChatGPT可以更加准确地理解用户的意图, 提供更加精准的答案。同时系统采用了最新的GPT3.5接口与GPT4模型,同时还支持型,文心一言,腾讯混元, 讯飞星火,通义千问,DeepSeeK,智普等等国内各种大模型,可以更好地适应不同的应用场景,支持站点无限多开, 可以说ChatGPT付费创作系统目前国内相对体验比较好的一款的ChatGPT及多接口软件系统。 新增接入DeepSeek-R1、DeepSeek-V3(Ollama自部署和第三方均支持)、高级通道增加DeepSeek、 支持AI接口输出的reasoning_content字段(新的推理输出格式)、更新模型库、修复导出Excel的bug等功能, 优化了云灵Midjourney接口,出图更快更稳定。小程序端变化不大该系统版本测试下来比较完美, 老版本升级时数据库结构同步下,同时把原来
内容概要:本文档详细介绍了一款基于Java技术的美食点餐管理平台的设计与实现。该平台旨在优化传统餐饮行业的服务流程,通过智能化的点餐系统、高效的订单处理、智能库存管理和数据分析等功能,为用户提供便捷高效的点餐体验,并提升餐厅管理效率和服务质量。系统涵盖了前端设计、后端开发、数据库设计等方面,采用了成熟的Java技术和现代Web开发框架,如Spring Boot、Vue.js或React,确保系统的高效性和稳定性。此外,文档还包括详细的用户界面设计、模块实现以及系统部署指南,帮助开发者理解和搭建该平台。 适合人群:具备一定的Java编程基础和技术经验的研发人员、IT从业者以及有意开发类似系统的企业和个人。 使用场景及目标:①为餐厅提供一个集点餐、订单处理、库存管理于一体的高效平台;②优化传统餐饮服务流程,提升客户服务体验;③利用大数据分析辅助决策,助力餐饮企业精细化运营;④通过集成多种支付方式和其他外部系统,满足多样化的商业需求。 其他说明:本项目不仅提供了完整的技术方案和支持文档,还针对实际应用场景提出了多个扩展方向和技术优化思路,旨在引导用户不断迭代和完善该平台的功能和性能。
相场模拟与激光制造技术:选择性激光烧结、激光融覆中的凝固与枝晶生长研究,相场模拟与激光制造技术:选择性激光烧结、激光融覆及凝固过程中的枝晶生长研究,相场模拟 选择性激光烧结 激光融覆 凝固 枝晶生长 ,相场模拟; 选择性激光烧结; 激光融覆; 凝固; 枝晶生长,相场模拟与激光工艺:枝晶生长的凝固过程研究
项目工程资源经过严格测试运行并且功能上ok,可实现复现复刻,拿到资料包后可实现复现出一样的项目,本人系统开发经验充足(全栈全领域),有任何使用问题欢迎随时与我联系,我会抽时间努力为您解惑,提供帮助 【资源内容】:包含源码+工程文件+说明等。答辩评审平均分达到96分,放心下载使用!可实现复现;设计报告也可借鉴此项目;该资源内项目代码都经过测试运行;功能ok 【项目价值】:可用在相关项目设计中,皆可应用在项目、毕业设计、课程设计、期末/期中/大作业、工程实训、大创等学科竞赛比赛、初期项目立项、学习/练手等方面,可借鉴此优质项目实现复刻,设计报告也可借鉴此项目,也可基于此项目来扩展开发出更多功能 【提供帮助】:有任何使用上的问题欢迎随时与我联系,抽时间努力解答解惑,提供帮助 【附带帮助】:若还需要相关开发工具、学习资料等,我会提供帮助,提供资料,鼓励学习进步 下载后请首先打开说明文件(如有);整理时不同项目所包含资源内容不同;项目工程可实现复现复刻,如果基础还行,也可在此程序基础上进行修改,以实现其它功能。供开源学习/技术交流/学习参考,勿用于商业用途。质量优质,放心下载使用
关于加强新能源汽车安全管理涉及的法规标准分析.pptx
项目工程资源经过严格测试运行并且功能上ok,可实现复现复刻,拿到资料包后可实现复现出一样的项目,本人系统开发经验充足(全栈全领域),有任何使用问题欢迎随时与我联系,我会抽时间努力为您解惑,提供帮助 【资源内容】:包含源码+工程文件+说明等。答辩评审平均分达到96分,放心下载使用!可实现复现;设计报告也可借鉴此项目;该资源内项目代码都经过测试运行,功能ok 【项目价值】:可用在相关项目设计中,皆可应用在项目、毕业设计、课程设计、期末/期中/大作业、工程实训、大创等学科竞赛比赛、初期项目立项、学习/练手等方面,可借鉴此优质项目实现复刻,设计报告也可借鉴此项目,也可基于此项目来扩展开发出更多功能 【提供帮助】:有任何使用上的问题欢迎随时与我联系,抽时间努力解答解惑,提供帮助 【附带帮助】:若还需要相关开发工具、学习资料等,我会提供帮助,提供资料,鼓励学习进步 下载后请首先打开说明文件(如有);整理时不同项目所包含资源内容不同;项目工程可实现复现复刻,如果基础还行,也可在此程序基础上进行修改,以实现其它功能。供开源学习/技术交流/学习参考,勿用于商业用途。质量优质,放心下载使用
项目工程资源经过严格测试运行并且功能上ok,可实现复现复刻,拿到资料包后可实现复现出一样的项目,本人系统开发经验充足(全栈全领域),有任何使用问题欢迎随时与我联系,我会抽时间努力为您解惑,提供帮助 【资源内容】:包含源码+工程文件+说明等。答辩评审平均分达到96分,放心下载使用!可实现复现;设计报告也可借鉴此项目;该资源内项目代码都经过测试运行;功能ok 【项目价值】:可用在相关项目设计中,皆可应用在项目、毕业设计、课程设计、期末/期中/大作业、工程实训、大创等学科竞赛比赛、初期项目立项、学习/练手等方面,可借鉴此优质项目实现复刻,设计报告也可借鉴此项目,也可基于此项目来扩展开发出更多功能 【提供帮助】:有任何使用上的问题欢迎随时与我联系,抽时间努力解答解惑,提供帮助 【附带帮助】:若还需要相关开发工具、学习资料等,我会提供帮助,提供资料,鼓励学习进步 下载后请首先打开说明文件(如有);整理时不同项目所包含资源内容不同;项目工程可实现复现复刻,如果基础还行,也可在此程序基础上进行修改,以实现其它功能。供开源学习/技术交流/学习参考,勿用于商业用途。质量优质,放心下载使用
UI+svg格式
关于乘用车燃料消耗量评价方法及指标强制性国家标准的分析.pptx
1、文件内容:openjpeg-1.5.1-18.el7.rpm以及相关依赖 2、文件形式:tar.gz压缩包 3、安装指令: #Step1、解压 tar -zxvf /mnt/data/output/openjpeg-1.5.1-18.el7.tar.gz #Step2、进入解压后的目录,执行安装 sudo rpm -ivh *.rpm 4、更多资源/技术支持:公众号禅静编程坊
FPGA Verilog实现BT656与1120视频协议组帧解帧代码详解:含文档介绍与仿真验证,FPGA Verilog实现BT656与1120视频协议组帧解帧代码详解:含文档介绍与仿真验证,fpga verilog实现视频协议bt656和1120组帧解帧代码 有文档介绍协议,有mod仿真,matlab代码仿真 ,FPGA; Verilog; BT656协议; 1120组帧解帧代码; 文档介绍; Mod仿真; Matlab代码仿真,FPGA Verilog:实现BT656与1120组帧解帧代码的仿真与文档化研究
基于 RAG 与大模型技术的医疗问答系统,利用 DiseaseKG 数据集与 Neo4j 构 建知识图谱,结合 BERT 的命名实体识别和 34b 大模型的意图识别,通过精确的知识检索和问答生成, 提升系统在医疗咨询中的性能,解决大模型在医疗领域应用的可靠性问题。.zip项目工程资源经过严格测试运行并且功能上ok,可实现复现复刻,拿到资料包后可实现复现出一样的项目,本人系统开发经验充足(全栈全领域),有任何使用问题欢迎随时与我联系,我会抽时间努力为您解惑,提供帮助 【资源内容】:包含源码+工程文件+说明等。答辩评审平均分达到96分,放心下载使用!可实现复现;设计报告也可借鉴此项目;该资源内项目代码都经过测试运行,功能ok 【项目价值】:可用在相关项目设计中,皆可应用在项目、毕业设计、课程设计、期末/期中/大作业、工程实训、大创等学科竞赛比赛、初期项目立项、学习/练手等方面,可借鉴此优质项目实现复刻,设计报告也可借鉴此项目,也可基于此项目来扩展开发出更多功能 【提供帮助】:有任何使用上的问题欢迎随时与我联系,抽时间努力解答解惑,提供帮助 【附带帮助】:若还需要相关开发工具、学习资料等,我会提供帮助,提供资料,鼓励学习进步 下载后请首先打开说明文件(如有);整理时不同项目所包含资源内容不同;项目工程可实现复现复刻,如果基础还行,也可在此程序基础上进行修改,以实现其它功能。供开源学习/技术交流/学习参考,勿用于商业用途。质量优质,放心下载使用