只想知道 发表于 2015-1-18 11:21:41

JAVA编程:Java和C++中多态的完成体例仓酷云

他们对jsp,servlet,javabean进行封装就是为了展示他们的某个思想,与java的开发并没有必然的关系,也不见得在所以情况下,别人使用起来会简单。多态是面向对象的最次要的特征之一,是一种办法的静态绑定,完成运转时的范例决意对象的举动。多态的体现情势是父类指针或援用指向子类对象,在这个指针上挪用的办法利用子类的完成版本。多态是IOC、模板形式完成的关头。
在C++中经由过程虚函数表的体例完成多态,每一个包括虚函数的类都具有一个虚函数表(virtualtable),在这个类对象的地点空间的最靠前的地位存有指向虚函数表的指针。在虚函数表中,依照声明按次顺次分列一切的虚函数。好比:

[*]classBase{
[*]public:
[*]virtualvoidf(){
[*]printf("Base::f()");
[*]}
[*]
[*]virtualvoidg(){
[*]printf("Base::g()");
[*]}
[*]};
[*]
[*]classDerived:publicBase{
[*]public:
[*]virtualvoidf(){
[*]printf("Derived::f()");
[*]}
[*]};
下面代码对应的类结构:

<br>
因为C++在运转时其实不保护范例信息,以是在编译时间接在子类的虚函数表中将被子类重写的办法交换失落,如上图的Derived::f(),这个办法会被放到虚函数表华夏来父函数在的地位。因为在编译时就断定了虚函数在虚表中的下标,以是在举行虚函数挪用时,间接依据下标举行会见。好比,挪用Derived对象上的f():

[*]Base*b=newDerived;
[*]b->f();
在挪用b->f()时,外部会转化成(*b->vptr)(),因为虚函数表必要完成RTII,以是虚函数表的第一个slot寄存的是typeinfo,虚函数下标从1入手下手。实践上,虚函数表纪录了这个类的一切虚函数的详细完成(就是在运转时切实要挪用的),编译时就能够断定,不必要静态查找,效力较高。
而Java中,在运转时会保持范例信息和类的承继系统。每个类会在办法区中对应一个数据布局用于寄存类的信息,能够经由过程Class对象会见这个数据布局。个中,范例信息具有superclass属性唆使了其超类,和这个类对应的办法表(个中只包括这个类界说的办法,不包含从超类承继来的)。而每个在堆上创立的对象,都具有一个指向办法区范例信息数据布局的指针,经由过程这个指针能够断定对象的范例。
JVM顶用于办法挪用的指令包含:
invokevirtual:用于挪用实例办法,会依据对象的实践范例举行挪用。
invokespecial:必要特别处置的实例办法,好比:publicfinal办法、公有办法和父类办法等。挪用的办法取决于援用的范例。
invokeinterface:挪用接口的办法。
invokestatic:挪用类办法。
依照下面形貌,关于子类掩盖父类的办法,编译后,挪用指令应当是invokevirtual,挪用的办法取决于对象的范例。invokevirtual办法查找的完成体例是:

关于第二点:俺问问你,如果是企业级项目的话,诸如RMI,EJB,等一些关键技术,这些难道都不需要学么?如果光是使用jsp,servlet,javabean的话。

老尸 发表于 2015-1-25 18:14:08

在全球云计算和移动互联网的产业环境下,Java更具备了显著优势和广阔前景。

深爱那片海 发表于 2015-2-1 11:53:02

自从Sun推出Java以来,就力图使之无所不包,所以Java发展到现在,按应用来分主要分为三大块:J2SE,J2ME和J2EE,这也就是Sun ONE(Open Net Environment)体系。J2SE就是Java2的标准版,主要用于桌面应用软件的编程;J2ME主要应用于嵌入是系统开发,如手机和PDA的编程;J2EE是Java2的企业版,主要用于分布式的网络程序的开发,如电子商务网站和ERP系统。

变相怪杰 发表于 2015-2-4 15:15:06

你现在最缺的是实际的工作经验,而不是书本上那些凭空想出来的程序。

飘灵儿 发表于 2015-2-6 20:29:55

是一种语言,用以产生「小应用程序(Applet(s))

兰色精灵 发表于 2015-2-13 08:48:11

设计模式是高级程序员真正掌握面向对象核心思想的必修课。设计模式并不是一种具体"技术",它讲述的是思想,它不仅仅展示了接口或抽象类在实际案例中的灵活应用和智慧

仓酷云 发表于 2015-3-3 01:02:29

那么我书也看了,程序也做了,别人问我的问题我都能解决了,是不是就成为高手了呢?当然没那么简单,这只是万里长征走完了第一步。不信?那你出去接一个项目,你知道怎么下手吗,你知道怎么设计吗,你知道怎么组织人员进行开发吗?你现在脑子里除了一些散乱的代码之外,可能再没有别的东西了吧!

再见西城 发表于 2015-3-8 11:10:18

Java是一个纯的面向对象的程序设计语言,它继承了 C++语言面向对象技术的核心。Java舍弃了C ++语言中容易引起错误的指针(以引用取代)、运算符重载(operator overloading)

蒙在股里 发表于 2015-3-13 00:08:21

还好,SUN提供了Javabean可以把你的JSP中的 Java代码封装起来,便于调用也便于重用。

admin 发表于 2015-3-20 06:26:52

你快去找一份Java的编程工作来做吧(如果是在校学生可以去做兼职啊),在实践中提高自己,那才是最快的。不过你得祈祷在公司里碰到一个高手,而且他 还愿意不厌其烦地教你,这样好象有点难哦!还有一个办法就是读开放源码的程序了。我们知道开放源码大都出自高手,他们设计合理,考虑周到,再加上有广大的程序员参与,代码的价值自然是字字珠叽,铿锵有力(对不起,偶最近《金装四大才子》看多了)。

冷月葬花魂 发表于 2015-4-12 03:04:38

Java是一种计算机编程语言,拥有跨平台、面向对java
页: [1]
查看完整版本: JAVA编程:Java和C++中多态的完成体例仓酷云