仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 1333|回复: 20
打印 上一主题 下一主题

[学习教程] JAVA编程:Java之旅(9)多态性

[复制链接]
再现理想 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-18 11:41:37 | 只看该作者 回帖奖励 |正序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
还有就是总有人问我到底该学习什么语言,什么语言有前途,那么我的回答是不论是C,C++,java,.net,ruby,asp或是其他语言都可以学,编程的关键不是语言,而是思想。多态性是继数据笼统和承继后,面向对象言语的第三个特性。



绑定(binding)(看起离开像一个音译词):将办法的挪用连到办法自己被称为绑定,当绑定产生在程序运转之前,被称做前绑定(earlybinding),而在程序运转的时分依据对象的范例来决意该绑定办法的成为后绑定,也叫运转时绑定(run-timebinding)或静态绑定(dynamicbinding);java的一切办法都接纳后绑定,也就是说一般情形下,

你不必思索是否是该接纳后绑定,这统统都是主动的。



有一个典范的关于“外形”的例子,能够活泼的申明甚么是后绑定。




在这个例子中,基类是shape类,它有几个派生类:circle,Square,Triangle,

Shapes=newCircle();

这里先创立了一个Circle对象,接着把它给了一个Shape,看上往如许做有点不当,不外确是不错的,由于Circle的确也是个Shape,接着假定你挪用了一个基类的办法

s.draw();
大概你会以为此次挪用的应当是shape的draw办法吧,但是不是,它挪用的倒是circle的draw(),这就是由于完成的后绑定的缘故原由。详细的完成办法就是基类界说了一个共用的接口DD也就是说一切的shape都有draw()办法和erase()办法,派生类会覆写这两个办法从而供应分歧的举动。到这里我想为何不间接写成:

Circles=newCircle();

s.draw();

厥后看到作者将这个例子修改成随机的创立一个Circle,Square,Triangle对象,由于这时候还不晓得创立的对象详细是甚么,以是只要像后面的那样的写法使用静态绑定才干完成。



由此我们看到了多态性的最年夜上风:可扩大性。我们能够依据必要增加恣意个新的范例,而不必忧虑修正基类里的办法,因而在一个计划优秀的OOP程序里,尽年夜多半办法城市和draw()办法一样,只跟基类接口打交道。这类程序是可扩大的,由于你能够经由过程“让新的数据范例承继通用的基类“的办法来增加新的功效。而那些与基类接口打交道的办法,基本不必要做修正就可以顺应新的类。



对程序员来讲,多态性是一项十分主要的手艺,它能让你将“会变的和不会变的分开开来“。



笼统类和笼统办法:要创立像shape类如许的类对象是没有实践意义的,更况且你大概还要制止用户这么做,如许我们可使用笼统办法来办理这个成绩。形如:

abstractvoidf();
而包括一个或多个笼统办法的类就是笼统类(含有笼统办法是必需被界说位笼统类的),笼统类的感化是经由过程一个大众的接口来操控一组类。它的办法就像下面例子里基类的办法一样,只是模样货。并且假如创立一个笼统类的对象,编译器就会报错。



假如你承继了笼统类,并盘算创立该类的对象,那就必需完成基类所界说的全体办法,不然有一个笼统办法存在的话,那末该类仍是个笼统类。



创立一个不包括笼统办法的笼统类是能够的,这类技能能够用于“不用创立笼统办法,但又想克制他人创立这个类的对象的场所”。



机关函数老是不同凡响,扳连到多态性也不破例。起首研讨一个例子,温习一下机关函数的挪用按次先。

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

classMeal{
Meal(){System.out.println("Meal()");}
}
classBread{
Bread(){System.out.println("Bread()");}
}
classCheese{
Cheese(){System.out.println("Cheese()");}
}
classLettuce{
Lettuce(){System.out.println("Lettuce()");}
}
classLunchextendsMeal{
Lunch(){System.out.println("Lunch()");}
}
classPortableLunchextendsLunch{
PortableLunch(){System.out.println("PortableLunch()");}
}

publicclassSandwichextendsPortableLunch{
privateBreadb=newBread();
privateCheesec=newCheese();
privateLettucel=newLettuce();
publicSandwich(){
System.out.println("Sandwich()");
}
publicstaticvoidmain(String[]args){
newSandwich();
System.out.println("准确输入:");
System.out.println(
"Meal()
"+
"Lunch()
"+
"PortableLunch()
"+
"Bread()
"+
"Cheese()
"+
"Lettuce()
"+
"Sandwich()"
);
}
}
///////////////////////////////////////////////////////////////////////////

也就是说庞大对象的机关函数的挪用按次是如许的:

1,挪用基类的机关函数。这是一个递回的历程,因而会先创立承继系统的根,然后是下一级派生类,以次类推直到最初一个承继类的机关函数。

2,成员对象依照其声明的对象按次举行初始化。

3,实行承继类的机关函数的注释。



关于清算事情,虽不经常使用,可是个十分必要当心的事情。



一个好的机关函数应当,“用起码的事情量把对象的形态设置好,并且要尽量的制止往挪用办法”机关函数独一能平安挪用的办法就是基类的final办法。(这一条也一样合用private,由于它主动就是final)他们不会覆写,因而也不会发生这类不测的举动。



待续。。。。。。






用java开发web只要两本书:一本是关于java基础的,一本是关于jsp、servlet的就可以了。开发周期长,我就来讲句题外话,现在有很多思想都是通过java来展现。
金色的骷髅 该用户已被删除
21#
发表于 2015-3-28 10:56:13 | 只看该作者
Java 不同于一般的编译执行计算机语言和解释执行计算机语言。它首先将源代码编译成二进制字节码(bytecode),然后依赖各种不同平台上的虚拟机来解释执行字节码。从而实现了“一次编译、到处执行”的跨平台特性。
深爱那片海 该用户已被删除
20#
发表于 2015-3-22 04:07:53 | 只看该作者
至于JDBC,就不用我多说了,你如果用java编过存取数据库的程序,就应该很熟悉。还有,如果你要用Java编发送电子邮件的程序,你就得看看Javamail 了。
因胸联盟 该用户已被删除
19#
发表于 2015-3-21 10:21:49 | 只看该作者
《JAVA语言程序设计》或《JAVA从入门到精通》这两本书开始学,等你编程有感觉的时候也可以回看一下。《JAVA读书笔记》这本书,因为讲的代码很多,也很容易看懂,涉及到面也到位。是你学习技术巩固的好书,学完后就看看《JAVA编程思想》这本书,找找一个自己写的代码跟书上的代码有什么不一样。
小妖女 该用户已被删除
18#
发表于 2015-3-20 20:15:36 | 只看该作者
是一种由美国SUN计算机公司(Sun Microsystems, Inc.)所研究而成的语言
只想知道 该用户已被删除
17#
发表于 2015-3-13 22:08:40 | 只看该作者
Pet Store.(宠物店)是SUN公司为了演示其J2EE编程规范而推出的开放源码的程序,应该很具有权威性,想学J2EE和EJB的朋友不要 错过了。
小魔女 该用户已被删除
16#
发表于 2015-3-10 21:19:50 | 只看该作者
Java是一个纯的面向对象的程序设计语言,它继承了 C++语言面向对象技术的核心。Java舍弃了C ++语言中容易引起错误的指针(以引用取代)、运算符重载(operator overloading)
山那边是海 该用户已被删除
15#
发表于 2015-3-10 07:02:59 | 只看该作者
在全球云计算和移动互联网的产业环境下,Java更具备了显著优势和广阔前景。
谁可相欹 该用户已被删除
14#
发表于 2015-3-7 12:06:23 | 只看该作者
你现在最缺的是实际的工作经验,而不是书本上那些凭空想出来的程序。
不帅 该用户已被删除
13#
发表于 2015-3-3 02:49:31 | 只看该作者
吧,现在很流行的Structs就是它的一种实现方式,不过Structs用起来实在是很繁,我们只要学习其精髓即可,我们完全可以设计自己的MVC结构。然后你再研究一下软件Refactoring (重构)和极限XP编程,相信你又会上一个台阶。 做完这些,你不如整理一下你的Java代码,把那些经典的程序和常见的应用整理出来,再精心打造一番,提高其重用性和可扩展性。你再找几个志同道合的朋友成立一个工作室吧
再现理想 该用户已被删除
12#
 楼主| 发表于 2015-3-2 19:56:58 | 只看该作者
吧,现在很流行的Structs就是它的一种实现方式,不过Structs用起来实在是很繁,我们只要学习其精髓即可,我们完全可以设计自己的MVC结构。然后你再研究一下软件Refactoring (重构)和极限XP编程,相信你又会上一个台阶。 做完这些,你不如整理一下你的Java代码,把那些经典的程序和常见的应用整理出来,再精心打造一番,提高其重用性和可扩展性。你再找几个志同道合的朋友成立一个工作室吧
灵魂腐蚀 该用户已被删除
11#
发表于 2015-2-28 06:06:37 | 只看该作者
Java 编程语言的风格十分接近C、C++语言。
第二个灵魂 该用户已被删除
10#
发表于 2015-2-18 09:02:12 | 只看该作者
我大二,Java也只学了一年,觉得还是看thinking in java好,有能力的话看英文原版(中文版翻的不怎么好),还能提高英文文档阅读能力。
admin 该用户已被删除
9#
发表于 2015-2-9 20:02:49 | 只看该作者
《JAVA语言程序设计》或《JAVA从入门到精通》这两本书开始学,等你编程有感觉的时候也可以回看一下。《JAVA读书笔记》这本书,因为讲的代码很多,也很容易看懂,涉及到面也到位。是你学习技术巩固的好书,学完后就看看《JAVA编程思想》这本书,找找一个自己写的代码跟书上的代码有什么不一样。
再见西城 该用户已被删除
8#
发表于 2015-2-8 19:25:18 | 只看该作者
任职于太阳微系统的詹姆斯·高斯林等人于1990年代初开发Java语言的雏形,最初被命名为Oak,目标设置在家用电器等小型系统的程序语言
柔情似水 该用户已被删除
7#
发表于 2015-2-7 04:31:19 | 只看该作者
是一种为 Internet发展的计算机语言
蒙在股里 该用户已被删除
6#
发表于 2015-2-6 03:06:31 | 只看该作者
[url]http://www.jdon.com/[/url]去下载,或到同济技术论坛的服务器[url]ftp://nro.shtdu.edu.cn[/url]去下,安装上有什么问题,可以到论坛上去提问。
变相怪杰 该用户已被删除
5#
发表于 2015-1-29 17:59:39 | 只看该作者
关于设计模式的资料,还是向大家推荐banq的网站 [url]http://www.jdon.com/[/url],他把GOF的23种模式以通俗易懂的方式诠释出来,纯Java描述,真是经典中的经典。
爱飞 该用户已被删除
地板
发表于 2015-1-29 06:52:33 | 只看该作者
一般学编程语言都是从C语开始学的,我也不例外,但还是可能不学过程语言而直接学面向对象语言的,你是刚接触语言,还是从C开始学比较好,基础会很深点,如果你直接学习JAVA也能上手,一般大家在学语言的时候都记一些语言的关键词,常有的包和接口等。再去做逻辑代码的编写,以后的学习过程都是从逻辑代码编写中提升的,所以这方面都是经验积累的。你要开始学习就从
乐观 该用户已被删除
板凳
发表于 2015-1-25 22:04:43 | 只看该作者
你一定会高兴地说,哈哈,原来成为Java高手就这么简单啊!记得Tomjava也曾碰到过一个项目经理,号称Java很简单,只要三个月就可以学会。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-11-15 20:24

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表