欢迎来到天天文库
浏览记录
ID:5984213
大小:33.50 KB
页数:11页
时间:2017-12-30
《java中构造方法深入探究和探析》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、Java中构造方法深入探究和探析 摘要:Java中的构造方法是构建对象的必经之路,其中有着深刻的哲学思想和严谨的科学态度。尤其在继承中更是有着纷繁复杂的表象,这些表象背后隐藏着诸多的玄机。该文立足于日常教学,对该问题进行了较为深入的探究,通过具体的例子逐步得到解答问题的钥匙,并结合设计模式进行了初步的探讨。最后结合这些思考,提出了一些不成熟的建议,以期更为深入的交流和探究。关键词:构造方法;继承;设计模式;探究思维;内部类中图分类号:TP311文献标识码:A文章编号:1009-3044(2013)24-5436-051概述在教学中,经常
2、面临这样的问题:已知人类(姓名,年龄,自我介绍()),那么学生类(姓名,年龄,学号,自我介绍(),选课())该如何定义?这是继承的一个常用的导入用例。利用继承的一个很好的标准是:is-a。所以这里的学生类一定是人类(注意这一点十分重要)。下面给出源程序:/*@1@*//**Person(name,age,introduction())*/11classPerson{privateStringname;privateintage;publicvoidintroduction(){System.out.println(”我是”+name+”,
3、今年”+age+“岁。”);}}//Person定义完毕/**Student(name,age,id,introduction(),sc())*/classStudentextendsPerson{}//Student定义完毕/**下面开始测试*/publicclassExtendsDemo{publicstaticvoidmain(String[]args){newStudent().introduction();}}//Student定义完毕/*#我是null,今年0岁。#*/好了,这是问题的原型,接着在此基础上逐步剖析构造方法。为了
4、便于讨论和交流,借用数据库理论中的关系模式来表述类,即类名(属性1,属性2……属性n,方法1(),方法2()……方法n()),显然做了修改,用一对圆括号表示方法。同时作出如下约定:a)利用注释“/*#11#*/“表示当前程序的输出,换行符默认失效;b)利用注释“/*!!*/”表示当前的错误;c)利用注释“/*??*/”表示当前的疑问;d)利用注释“/*@n@*/“表示当前的版本,第n版一定来自第n-1版,所以第n版中与第n-1版中的相同部分不再显示,然后讨论的时候就用版本号来表示程序;e)所有的代码都在同一个文件中;f)凡是与问题无关的方
5、法一概尽量地简化;g)为了节省篇幅,尽量压缩代码,尽量减少注释,由此将损失规范性。2问题剖析上述代码很好地执行了,继承得到了完美的体现。不足的是我们创建的实例是没有个性的,其名称为null,年龄为0,这是因为使用的是默认构造方法。形如publicPerson(){},这种结果可能会令人失望,但是后面的探讨将告诉我们它是多么重要。为了说明这个问题,开始我们的第一次修改,给Person类增加一个形如默认构造方法的构造方法,即第2个版本,按照引子中的约定,相同部分不再显示:/*@2@*/publicPerson(){System.out.pri
6、ntln(”publicPerson()”);}/*#publicPerson()我是null,今年0岁。#*/11结果告诉我们这样一个事实,父类(Person)的构造方法被调用了,这是怎么回事?其实子类(Student)并没有“显式的”构造方法,所以系统会默默地提供一个形如publicStudent(){}的构造方法,而这个构造方法会作出一个举动:默默地调用父类的构造方法。这个结论也许并不是什么新奇的结论,但是我开始并没有意识到或者认识的不够彻底,对后续的研究和探讨带了一定的羁绊。与此同时,正是对这个看似很简单的细节认识清楚以后,才有了
7、本文的诞生,由此可见,关注细节是至关重要的。探讨的序幕拉开了,一个很关键的问题来了:对于父类的构造方法的调用真的如此简单么?如果将第2个版本的构造方法修改如下,注意是修改,而不是重载:/*@3@*/publicPerson(Stringname,intage){this.name=name;this.age=age;System.out.println(”publicPerson()”);}这会产生什么结果呢?结果是没有结果,因为等待我们的是编译错误。引用简化后的错误提示——无法将类Person中的构造器(就是构造方法)Person应用到
8、给定类型,需要:String,int找到:11没有参数。这是JDK给我们的帮助信息,善于利用调试工具,才是我们学习计算机语言的正确之路。错误提示说明了一个事实:如果你给出了任何一个构造方法,系
此文档下载收益归作者所有