织梦内容管理系统
dedecms.com
下面是杰和涛的对话
织梦内容管理系统
dedecms.com
杰:你的代码大量重复,你的旋转过程在四个图形的东西里都有。
copyright dedecms
涛:这是方法,不是过程。还有他们是类,不叫做东西。 copyright dedecms
内容来自dedecms
杰:不管叫什么,你的设计简直是垃圾。你要处理四个不同旋转“方法”。你怎么处理啊?
dedecms.com
涛:我猜你是没看见最后的设计。让我告诉你继承在面向对象中书如何工作的。看这四个类是有共同点的。它们都有rotate()和playSound() 本文来自织梦
内容来自dedecms
于是我抽象出一个Shape类来 本文来自织梦
内容来自dedecms
织梦内容管理系统
abstract class Shape(){ dedecms.com
rotate(); 内容来自dedecms
playSound();
织梦好,好织梦
} copyright dedecms
内容来自dedecms
copyright dedecms
然后我让这四个类继承这个抽象的类
copyright dedecms
织梦好,好织梦
内容来自dedecms
内容来自dedecms
class Square extends Shape {
rotate () { 内容来自dedecms
// code to rotate a square 内容来自dedecms
} 织梦好,好织梦
playSound() { copyright dedecms
// code to play the AIF file for a square dedecms.com
}
}
class Circle extends Shape { copyright dedecms
rotate () { 织梦内容管理系统
// code to rotate a circle
}
本文来自织梦
playSound() { 内容来自dedecms
// code to play the AIF file for a circle 织梦好,好织梦
} dedecms.com
}
内容来自dedecms
class Triangle extends Shape { 织梦内容管理系统
rotate () {
// code to rotate a triangle copyright dedecms
} 织梦内容管理系统
playSound() {
// code to play the AIF file for a triangle dedecms.com
}
} 内容来自dedecms
class Amoeba extends Sharpe{ 内容来自dedecms
int xPoint; 内容来自dedecms
int yPoint;
dedecms.com
rotate () {
// code to rotate an amoeba using amoeba’s x and y copyright dedecms
} 织梦内容管理系统
playSound() {
// code to play the new .hif file for an amoba
copyright dedecms
} 内容来自dedecms
}
织梦内容管理系统
内容来自dedecms
那Amoeba的类旋转呢? 内容来自dedecms
内容来自dedecms
杰:问题不是就在这吗?Amoeba有完全不同的旋转和播放音效的过程吗?
本文来自织梦
涛:是方法。 织梦内容管理系统
本文来自织梦
杰:不管是它叫什么了。Amoeba怎么能实现与他说继承的类shape不同的事呢? 织梦好,好织梦
copyright dedecms
涛:这是最后一遍了。Amoeba重骑(overrides)了Shape类的方法。在运行时(runtime)Java的虚拟机(JVM)知道但程序需要Amoeba去旋转时应该调用相应的方法。
杰:你怎么告诉Amoeba去旋转啊?难道你们不要调用过程,哦不对,是方法然后告诉它应该那个图形去旋转吗? 织梦内容管理系统
copyright dedecms
涛:这就是面向对象的好处所在了。比如说,要让三角形旋转。程序调用Triangle对象的rotate( )方法。程序的其他部分不知道也不在于三角形形是怎么转的。当你要想添加一点功能到程序中时,你只要写一个为新的对象类型写一个新的类,那个新的对象有自己的特性。
dedecms.com
copyright dedecms
杰:我希望我也能成为一个面向对象的程序员,这太神奇了。 内容来自dedecms
dedecms.com
后记 copyright dedecms
这是半年多来,我所看过的Java的文章中,对面向对象讲解的最生动的一篇。因为是英文的,所以一直放在那里。也曾试着写一个类似的例子。因为水平有限一直没有完成。很久没有给论坛点好东西了。于是用了三天的时间把它翻译改编出来了。也找到这篇原版的PDF。 内容来自dedecms
内容来自dedecms
当然这篇文章只是一个启发性的东西。要了解并且熟悉面向对象,需要的是时间和实践。你自己不去看点东西,写点东西,当然会被什么类啊,对象啊搞得云里雾里的啊。 织梦内容管理系统
这是一个令人浮躁的年代。什么动画啊,视频教程的汗牛充栋。不能否认,这些东西生动直观。然而轻易得来得东西,也会轻易的忘记的快。
dedecms.com
copyright dedecms
我又多嘴了。最后再唠叨几句吧。面向对象是个好东西啊。当然如果你写程序只是为了编译一些什么溢出工具什么的,那可以不去理解什么是面向对象。但如果你真的想搞点大的,有商业前途的东西,面向对象的思想是一定要有的。
织梦内容管理系统
copyright dedecms 复制地址和好友共享








