- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Java中构造方法深入探究和探析
Java中构造方法深入探究和探析 摘要:Java中的构造方法是构建对象的必经之路,其中有着深刻的哲学思想和严谨的科学态度。尤其在继承中更是有着纷繁复杂的表象,这些表象背后隐藏着诸多的玄机。该文立足于日常教学,对该问题进行了较为深入的探究,通过具体的例子逐步得到解答问题的钥匙,并结合设计模式进行了初步的探讨。最后结合这些思考,提出了一些不成熟的建议,以期更为深入的交流和探究。
关键词:构造方法;继承;设计模式;探究思维;内部类
中图分类号:TP311 文献标识码:A 文章编号:1009-3044(2013)24-5436-05
1 概述
在教学中,经常面临这样的问题:已知人类(姓名,年龄,自我介绍()),那么学生类(姓名,年龄,学号,自我介绍(),选课())该如何定义?这是继承的一个常用的导入用例。利用继承的一个很好的标准是:is-a。所以这里的学生类一定是人类(注意这一点十分重要)。下面给出源程序:
/*@ 1 @*/
/** Person(name,age,introduction()) */
class Person {
private String name;
private int age;
public void introduction() {
System.out.println(”我是” + name +”,今年” + age + “岁。”);}} // Person定义完毕
/** Student(name,age,id, introduction(),sc()) */
class Student extends Person {
}// Student定义完毕
/** 下面开始测试 */
public class ExtendsDemo {
public static void main(String[] args) {
new Student().introduction();}}// Student定义完毕/*# 我是null,今年0岁。#*/
好了,这是问题的原型,接着在此基础上逐步剖析构造方法。
为了便于讨论和交流,借用数据库理论中的关系模式来表述类,即类名(属性1,属性2……属性n,方法1(),方法2()……方法n()),显然做了修改,用一对圆括号表示方法。同时作出如下约定:
a)利用注释“/*# #*/“表示当前程序的输出,换行符默认失效;
b)利用注释“/*! !*/”表示当前的错误;
c)利用注释“/*? ?*/”表示当前的疑问;
d)利用注释“/*@ n @*/“表示当前的版本,第n版一定来自第n-1版,所以第n版中与第n-1版中的相同部分不再显示,然后讨论的时候就用版本号来表示程序;
e)所有的代码都在同一个文件中;
f)凡是与问题无关的方法一概尽量地简化;
g)为了节省篇幅,尽量压缩代码,尽量减少注释,由此将损失规范性。
2 问题剖析
上述代码很好地执行了,继承得到了完美的体现。不足的是我们创建的实例是没有个性的,其名称为null,年龄为0,这是因为使用的是默认构造方法。形如public Person(){},这种结果可能会令人失望,但是后面的探讨将告诉我们它是多么重要。为了说明这个问题,开始我们的第一次修改,给Person类增加一个形如默认构造方法的构造方法,即第2个版本,按照引子中的约定,相同部分不再显示:
/*@ 2 @*/
public Person(){
System.out.println(”public Person()”);}/*#public Person() 我是null,今年0岁。#*/
结果告诉我们这样一个事实,父类(Person)的构造方法被调用了,这是怎么回事?其实子类(Student)并没有“显式的”构造方法,所以系统会默默地提供一个形如public Student(){}的构造方法,而这个构造方法会作出一个举动:默默地调用父类的构造方法。这个结论也许并不是什么新奇的结论,但是我开始并没有意识到或者认识的不够彻底,对后续的研究和探讨带了一定的羁绊。与此同时,正是对这个看似很简单的细节认识清楚以后,才有了本文的诞生,由此可见,关注细节是至关重要的。
探讨的序幕拉开了,一个很关键的问题来了:对于父类的构造方法的调用真的如此简单么?
如果将第2个版本的构造方法修改如下,注意是修改,而不是重载:
/*@ 3 @*/
public Person(String name, int age){
this.name = name; this.a
您可能关注的文档
最近下载
- 天然药物化学实验习题.docx VIP
- 天然药物化学考试题及答案.docx VIP
- T_ZJPA 001—2021_制药工业环境微生物数据库构建技术规范.pdf VIP
- 中小学第15课 第二次世界大战(课件)教育教学资料整理.pptx VIP
- 台达IED-G使用手册.pdf VIP
- 实施指南《GB_T42755 - 2023人工智能面向机器学习的数据标注规程》实施指南.docx VIP
- 酒店员工劳动合同范本及签订指南.docx VIP
- 2025广西公需科目考试题库和答案(覆盖99%考题)广西“一区两地一园一通道+人工智能时代的机遇.docx VIP
- 东北财经大学2023-2024学年《马克思主义基本原理概论》期末考试试卷(A卷)含参考答案.docx
- T100鼎新技术手册.docx VIP
原创力文档


文档评论(0)