惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Hacker News: Ask HN
Hacker News: Ask HN
Jina AI
Jina AI
U
Unit 42
月光博客
月光博客
宝玉的分享
宝玉的分享
博客园 - 叶小钗
Blog — PlanetScale
Blog — PlanetScale
The Cloudflare Blog
D
Docker
Y
Y Combinator Blog
P
Privacy & Cybersecurity Law Blog
Hacker News - Newest:
Hacker News - Newest: "LLM"
Last Week in AI
Last Week in AI
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
V
Visual Studio Blog
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
T
Threat Research - Cisco Blogs
G
Google Developers Blog
H
Hacker News: Front Page
罗磊的独立博客
博客园 - 【当耐特】
P
Proofpoint News Feed
MongoDB | Blog
MongoDB | Blog
A
About on SuperTechFans
有赞技术团队
有赞技术团队
P
Palo Alto Networks Blog
T
Tailwind CSS Blog
L
Lohrmann on Cybersecurity
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
博客园_首页
H
Help Net Security
SecWiki News
SecWiki News
J
Java Code Geeks
I
InfoQ
T
Troy Hunt's Blog
GbyAI
GbyAI
M
MIT News - Artificial intelligence
Project Zero
Project Zero
Martin Fowler
Martin Fowler
The Hacker News
The Hacker News
Know Your Adversary
Know Your Adversary
Application and Cybersecurity Blog
Application and Cybersecurity Blog
C
Cyber Attacks, Cyber Crime and Cyber Security
The Register - Security
The Register - Security
Cyberwarzone
Cyberwarzone
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
P
Proofpoint News Feed
MyScale Blog
MyScale Blog
A
Arctic Wolf
P
Privacy International News Feed

博客园 - csdnexpert

美国程序员Peter:落脚北京只因这里的胡同 不是冷饭的冷饭:重评芙蓉姐姐现象 从早晨8点到晚上12点:WebEx合肥CTO的一天 转胡一虎Blog:父亲是我生命中的永恒 十年后,ELM会不会创造SOA现在所创造的局面? 来京两载,今日入清华读书,记一笔 传媒人应该具备的素质:批判 理性 正气 异国也有欢乐:北京Linux User Group探访实录 解释传统与敏捷方法最贴切的故事:大象与猴子 媒体的关键还是在于“软件”(人与规范) “Web开发之华山论剑”制作花絮与推荐导读 利用Radrails开发Ruby on Rails程序入门指南 “悲欣交集”的《开源大本营》制作之路 Alistair讲座的几点感受:纠正对敏捷方法的误解 在Eclipse里实现Ant自动编译 Java之父Gosling:Java没有受到PHP、Ruby或C#的威胁 PC-cillin 2005网络安全版使用简评 为什么刘彻会成为一代名君? 有选择才精彩 到哪里都是从零开始 可怜的微软与项目管理经典图解 从对一篇文章的修改看写作中的主题把握 谁说做软件测试没有好的前途?反驳之 《程序员》第9期:面对多核时代 我们以何应对? 8月的最后一天,我们开赴日照前线 Java Transaction Design Strategies推荐阅读 温总理对读书和思考问题的回答 共享软件大鳄来华抢人 是机遇还是挑战? 只有资源共享 中国共享软件才能突破性发展 又可以写Blog了 心里竟有点小小的激动 反射机制与系统耦合实例详解 事件驱动模型实例详解(Java篇) 商业项目应该向开源项目学习什么? 开源的软件+商业的服务=? 封印的武士 测试Google的网络Office——Writely 《男人装》2006.05 未来技术杂志会走向哪里? 评评点点,程序员的2006世界杯 终于理解了我的作者 你知道的Java,和你不知道的Java [投票]3·15消费者日 《程序员》杂志之现状调查 三言二拍 Eclipse+Tomcat实现Mysql数据库连接 解决在Eclipse中配置JBoss、Tomcat等插件时遇到的问题 Log4j日志管理系统简单使用说明 IntelliJ IDEA使用技巧一览表 我喜欢使用IntelliJ Idea的25个理由 新帆起航,目标新大陆,感谢大家.... 6.26南汇校园行 集合框架的授课感想 反射在Java Swing中的应用 从杭州到北京 华为“新同事文化”:爱你的同事如兄弟 读书的快乐 闻听06年研究生收费有感 用创新产品支撑流体计算 杂拌儿:歪评百度牵手MTV、雅虎推出优化IE7现象 有钱的IBM 有争议的开发者大会 7月最后一天脑袋里的杂事 2006-IBM开发者大会现场组图与技术点(部分) 火锅论坛:要团队不要群体 中国软件的井喷时代 热烈庆祝CSDN 2006年中大会顺利闭幕 听同学谈有中国特色的软件营销模式 马云于“赢在中国”的一些讲话 看图识性格,蛮有意思的,累的时候玩一下:) 8月19日BBUG:电信技术开发经验分享与前景展望 Yahoo!新成立Python开发者中心 推动Python发展 也谈如何举办一场成功的技术讲座? 不满SourceForge服务 JRuby迁移至CodeHaus 看完《天狗》,我对社会充满了失望 从写Blog看技术人员成长6要素 再次慨叹生命的脆弱,我辈当惜之 急雨、泥土与睡觉 Google继续扩张,“魔爪”伸向服务器 感慨国内技术网站的环境 外包,从拧螺丝钉开始 史上最大规模的Agile开源项目Callisto发布 畅快、郁闷、遗憾 阿根廷,让我如何不爱你? 好笑的那几个小时 人是应该有长远目标的 庆祝阿根廷挺进八强 博客究竟能做什么? 对Web标准的9大误解 Slashdot热点一览 Blogger的痛心事——没人回贴 一个责任编辑的日记 你可以赚钱,但你赚不来时间 印度软件外包发展简记 那一段情系列之一:Fangfang 从《读库》关于“报人”文章感叹今日技术媒体 Mop研发团队:网络时代的技术偏执狂(全文) DevCo专家李维推荐的学习方法 英雄迟暮,一声长叹,且看10个可怜的技术天才 《程序员》7月刊即将上市 10大看点值得关注 把软件外包给中国,放心吗? 我也是个博客青苹果 DirectX 10后面的微软牛人们 参加IBM开发者大会前一天
面向对象的授课感想
csdnexpert · 2007-12-17 · via 博客园 - csdnexpert

面向对象的授课感想

Posted on 2007-12-17 11:26  csdnexpert  阅读(179)  评论()    收藏  举报

 

0707班是我来到Softworks所带的第十一个班级,就以前的带班经验而言,我认为一个软件开发初学者在Java编程语言中最难以学习的就是面向对象的概念,尤其以面向父类,面向接口编程尤为困难。作为学术研究人员,我翻阅了很多Java书籍,试图来找寻解决上述问题的方法。但是目前市场上的书籍对于刚才这些问题的阐述都比较肤浅,很难讲述给学员,因此我自己对面向父类,面向接口编程的概念作出了总结,并在多个班级中进行了实践,结果还是相当不错的,作为学习,我将自己总结的原则写于博客中,希望给更多的软件学习者提供帮助。

在面向对象的学习过程中,我为学员提出的总结性原则是:“左声明右实现”,那么如何来理解这句话呢?我们来看一个我上课一直沿用的案例:

package cn.softworks.oojava.demo;

/***坦克类,它是所有坦克的父类*/

class Tank {

    publicvoid printTank()

    {

        System.out.println("This is Tank");

    }

}

/***M1坦克类,它继承了坦克父类*/

class M1Tank extends Tank

{  

    //该方法重写了父类中的printTank

    publicvoid printTank()

    {

        System.out.println("This is M1Tank");

    }

    //M1Tank自己的方法

    publicvoid showName()

    {

        System.out.println("M1Tank");

    }

}

/***虎式坦克类,它继承了坦克父类*/

class TigerTank extends Tank

{  

    //该方法重写了父类中的printTank

    publicvoid printTank()

    {

        System.out.println("This is TigerTank");

    }

}

/***坦克类的测试类*/

publicclass ClassMain {

    publicstaticvoid main(String args[]) {

        Tank

tank

= new TigerTank();

        //最终的输出结果为:This is TigerTank

        tank.printTank();

    }

}

以上代码的最终运行结果是:This is TigerTank

我们再来看看“左声明右实现”这句话,作为以下语句而言:

Tank 

tank

= new TigerTank();

等号的左侧是Tank tank,而等号的右侧是 new TigerTank(),

根据“左声明右实现”的原则可以肯定左侧的Tank tank代码只是用来告诉编译器,在Tank类中拥有printTank方法,它只是对printTank方法进行了一次声明并没有真正实现(开辟空间),而真正的实现是在右侧的,new TigerTank()明确告诉了编译器,左侧的printTank方法由TigerTank来实现,因此最终使用的是TigerTank类中的printTank方法而并非是Tank类中的printTank方法,打印结果也就理所当然的为This is TigerTank了。

如果我们将代码写成以下形式:

Tank 

tank

= new M1Tank();

最终的运行结果为:This is M1Tank

根据“左声明右实现”的原则可以理解为Tank tank中所声明的printTank方法应该有M1Tank()来实现,因此最终使用的是M1Tank中的printTank方法。

请同学们注意:以上这个原则可以在任何地方使用,包括在接口和抽象类中,软件初学者可以以这个原则来理解面向父类的编程方法。

请同学用“左声明右实现”原则来考虑以下代码的运行结果:

Tank 

tank

= new M1Tank();

tank.showName();

答案为:编译出错,错误提示:没有showName这个方法,请同学们考虑一下这是为什么呢 :-) ?

上海Softworks软件人才培训中心
电话:021-53086530    53086531
地址:上海市北京东路668号科技京城东楼9楼E座
网址:
www.softworks.cn

Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=1685053