|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
首先java功能强大的背后是其复杂性,就拿web来说,当今流行的框架有很多,什么struts,spring,jQuery等等,而这无疑增加了java的复杂性。这是我明天在事情中碰着的成绩,是关于承继和多态的。同事对项目中的一项基本功效举行了重构,但是当我们从CVS服务器上更新了项目源代码并编译了以后,发明这项功效已不克不及一般事情了。先撇开这个同事所犯的毛病(对代码举行重构后没有测试他的新代码就上传到了CVS服务器上)不说,在这里我就说说这个成绩所带出来的JAVA konwhow.因为我们的项目对照庞大,我在这里接纳对照复杂的例子来说解这个成绩。起首,我们有2个类:supper.TestSupper.java 和sub.TestSub.java。他们的代码是如许的:packagesupper;publicclassTestSupper{StringgetString(){return"Thisissupperclass.";}}-----------------------------------packagesub;importsupper.TestSupper;publicclassTestSubextendsTestSupper{publicStringgetString(){return"Thisissubclass.";}}非常复杂,第一眼看上往,你会以为TestSub承继了TestSupper而且重写getString()办法。如今我们写一个测试程序:packagesupper;importsub.TestSub;publicclassTest{publicstaticvoidmain(String[]args){TestSuppertest=newTestSub();System.out.println(test.getString());}}请注重啊!测试程序和TestSupper在统一个包里。从实际上说,这个测试程序应当输入“Thisissubclass”,由于test的实体是一个TestSub对象而不是TestSupper。以是,当我们挪用test.getString()时,真正被挪用的应当是TestSub里的getString()。但是现实怎样呢?输入是"Thisissupperclass."!为何会如许的?缘故原由很复杂,由于在TestSupper里办法getString()的标签(signature)是"default",是默许的不必写出来。这招致这个办法只能在这个包内里可见。TestSub固然承继了TestSupper,却没有举措“瞥见”getString()办法,由于TestSub在别的一个包里。以是当我们在测试程序里挪用test.getString(),程序起首会寻觅TestSub中是不是重写了这个办法,在这里请必定要注重标签是default的,固然是没有发明。了局程序就会挪用父类的响应办法,故父类中的了局就被输入了。办理的举措很复杂,凡是是要被重写的办法必定不克不及界说成“default”,起码要界说成"protected”.假如你是在利用Eclipse的话,你能够在eclipse中举行设置,把这类情形视为Error就能够制止这类毛病的发生。办法是:window ->preferences -> style ->methods overridden but not pachage visible这项选为Error。我用的是eclipse3.0。后话别看这是个很小的成绩,并且很复杂,一看就分明,但是当体系呈现了成绩,而你要在几百个类中寻觅到成绩地点的时分,这类不容易发觉的毛病相对是致命的。寻觅这个毛病花了我们2团体天!可骇吧!
学习JAVA的目的更多的是培养自身的工作能力,我觉得工作能力的一个核心就是:独立思考能力,因为只有独立思考后,才会有自己的见解 |
|