动态网站制作指南 [  QQ表情  ]
[ 投票调查 ]
[ 企业邮箱 ]
[ 网站空间 ]
网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 邮件系统 | 网络安全 | 认证考试 | 系统进程
ASP源码 | .Net源码 | PHP源码 | JSP源码 | JAVA源码 | CGI源码 | VB源码 | C++源码 | Delphi源码 | PB源码 | VF源码 | 汇编 | 服务器
Firefox | IE | Maxthon | 迅雷 | 电驴 | BitComet | FlashGet | QQ | QQ空间 | Vista | 输入法 | Ghost | Word | Excel | wps | Powerpoint
asp | .net | php | jsp | Sql | c# | Ajax | xml | Dreamweaver | FrontPages | Javascript | css | photoshop | fireworks | Flash | Cad | Discuz!
当前位置 > 网站建设学院 > 网络编程 > Java教程
Tag:注入,存储过程,分页,安全,优化,xmlhttp,fso,jmail,application,session,防盗链,stream,无组件,组件,md5,乱码,缓存,加密,验证码,算法,cookies,ubb,正则表达式,水印,索引,日志,压缩,base64,url重写,上传,控件,Web.config,JDBC,函数,内存,PDF,迁移,结构,破解,编译,配置,进程,分词,IIS,Apache,Tomcat,phpmyadmin,Gzip,触发器,socket
网络编程:ASP教程,ASP.NET教程,PHP教程,JSP教程,C#教程,数据库,XML教程,Ajax,Java,Perl,Shell,VB教程,Delphi,C/C++教程,软件工程,J2EE/J2ME,移动开发
文章搜索服务
邮件订阅
输入你的邮件地址,
你将不会错过任何关于:
[ Java教程 ]的信息

本月文章推荐
.用Java SE 6.0实现高质量桌面集成.
.企业版JavaBean讨论.
.Java技术在多数据库系统中的应用.
.getUTCSeconds 方法.
.虚拟机概论(六)——JAVA虚拟机.
.体验J2SE 1.5新特性之增强For循环.
.看例子练apache commons之lang篇.
.一步一步学习midp2。0游戏编程(.
.Java实现Http服务器之一.
.Effective Java读书笔记之五.
.item 方法.
.使用Properties类带来的好处.
.一个简单的 JDBC 包装器.
.Struts 1.2.2 新功能全新体验.
.JDBC基础.
.Java扫雷程序,初试Java.
.JAVA基本名词解释.
.用java学习数据结构--单链表.
.一个验证歌德巴赫猜想的小程序.
.java的线程安全四种方式五个等级.

面向对象思想之--理解类和对象

发表日期:2008-1-5 |



  上一次在"使用Java开始面向对象的编程"这篇文章中,我们学习了一个编程语言要真正成为面向对象的,它应该支持信息隐藏/封装,多态,继续和动态绑定.另外,我们知道了Java完全支持这些功能,而且知道了因为Java是一种解释性的语言并运行在虚拟机的内部,所以由Java写成的任何程序都可以在任何支持 Java虚拟机(JVM)的操作系统上运行.我们还明白了对象是代表现实生活中事物的软件-编程模型以及对象是由它们的状态和行为定义的.最后,我们知道了Java中除了原始数据对象以外一切都是对象.
  
  因为这种程序设计风格中的这许多内容都和对象以及类有关,我们将在下面进一步的考察它们.
  
  对象详论
  使用对象的一个要害是当你在浏览系统分析文档或者设计文档的时候如何来确定它们.因为对象一般代表人,地方或者事物,所以一个确定对象的基本的方法就是找出句子中所使用的名词.这里有一个简单的例子.在句子"一个顾客可以拥有多于一个的银行帐号",我们就确定了两个对象,客户和帐号.在句子"小猫喵喵叫"中,我们能够确定一个对象,猫.
  
  类详论
  前面,我们学习了一个类是定义了对象如何动作以及当对象创建或者说实例化的时候应该包含些什么的实体.在对动物的讨论中,我们可以说,"狗儿汪汪叫,猫喵喵叫,鸭子嘎嘎叫."确定句子中的对象我们就得到了狗,猫和鸭子.至于汪汪叫,喵喵叫,嘎嘎叫,那都是我们对象发出的行为动作.
  
  要实现这些对象,我们需要创建三个对象分别叫Dog,Cat和DUCk.要实现它们的行为,我们可以为每一个这些对象创建代表每个对象发出的声音的方法,而且我们把这个方法叫做speak或者,假如我们发挥想象力的话还可以把这个方法叫做sayHello.
  
  在程序的上下文中为了演示这些概念,让我们修改上篇文章中的HelloWorld程序,添加这三个新对象并给它们中的每一个添加sayHello方法,如下所示:
  
  public class HelloWorld
  {
    public static void main(String[] args)
    {
      Dog animal1 = new Dog();
      Cat animal2 = new Cat();
      Duck animal3 = new Duck();
      animal1.sayHello();
      animal2.sayHello();
      animal3.sayHello();
    }
  }
  
  class Dog
  {
    public void sayHello()
    {
      System.out.println("Bark");
    }
  }
  
  class Cat
  {
    public void sayHello()
    {
      System.out.println("Meow");
    }
  }
  
  class Duck
  {
    public void sayHello()
    {
      System.out.println("Quack");
    }
  }
  
  在编译并运行了这个程序以后,输出应该如下:
  Bark
  Meow
  Quack
  
  看看我们的程序,我们马上就注重到了一些事情:每个对象代表了一种动物,而每个对象实现了一个相同的方法,sayHello.假设我们想要给对象更多的功能以及用来代表对象所指的动物的方法和属性.比方说,我们可以添加一个方法来确定一个动物是不是哺乳类的,或者我们添加一个方法来确定一个动物是不是肉食性的.我们可以通过给每一个对象添加这两种方法来实现或者我们也能够使用OOP的两个最强大的功能:继续和多态.
  
  因为所有的对象都代表一个对象,所以我们将创建一个被称为"基类"或是"超类"的类,它的名字是Animal.我们然后可以让我们的对象从Animal类继续相同的特点并强制每个对象只实现与Animal类不同的功能.
  
  Java用extends要害字指明一个类从另一个继续.让我们利用继续和多态的概念获得代码重用的好处来重建我们的程序并使得每个对象只实现与基类Animal不同的功能:
  
  public class HelloWorld
  {
    public static void main(String[] args)
    {
      Dog animal1 = new Dog();
      Cat animal2 = new Cat();
      Duck animal3 = new Duck();
      System.out.println("A dog says " +animal1.getHello()
      +", is carnivorous: " +animal1.isCarnivorous()
      +", is a mammal: " +animal1.isAMammal());
  
      System.out.println("A cat says " +animal2.getHello()
      +", is carnivorous: " +animal2.isCarnivorous()
      +", is a mammal: " +animal2.isAMammal());
  
      System.out.println("A duck says " +animal3.getHello()
      +", is carnivorous: " +animal3.isCarnivorous()
      +", is a mammal: " +animal3.isAMammal());
    }
  }
  
  abstract class Animal
  {
    public boolean isAMammal()
    {
      return(true);
    }
  
    public boolean isCarnivorous()
    {
      return(true);
    }
  
    abstract public String getHello();
  }
  
  class Dog extends Animal
  {
    public String getHello()
    {
      return("Bark");
    }
  }
  
  class Cat extends Animal
  {
    public String getHello()
    {
      return("Meow");
    }
  }
  
  class Duck extends Animal
  {
    public boolean isAMammal()
    {
      return(false);
    }
  
    public boolean isCarnivorous()
    {
      return(false);
    }
  
    public String getHello()
    {
      return("Quack");
    }
  }
  
  在编译并运行我们的程序以后,输出应该如下:
  A dog says Bark, is carnivorous: true, is a mammal: true
  A cat says Meow, is carnivorous: true, is a mammal: true
  A duck says Quack, is carnivorous: false, is a mammal: false
  
  看看我们的例子,你将发现我们定义了一个叫做Animal的新类,它定义了三个方法:isAMammal, isCarnivorous, 和 getHello.你一概还注重到了,我们在每个现存的类申明的前面都添加了extends Animal这个语句.这个语句告诉编译器这些对象是Animal类的子类.
  
  因为方法isAMammal 和 isCarnivorous 都返回 true,所以Dog和Cat类用不着重新实现--即"重载"这两个方法.但是鸭子既不是哺乳动物又不是肉食性的,所以Duck类需要重载这两种方法来返回正确的值.我们所有的对象都以自己独特的方式说"hello",所以它们都需要重载getHello方法.因为每种动物说"hello"的方式都不同,所以我们在基类中将getHello方法申明为抽象的,而且我们没有给这个方法一个函数体.这就迫使Animal的每一个子类重载getHello方法并根据每一个特定动物的需要来定义它.
  
  因为我们将getHello方法申明为虚拟的,我们就不能直接实例化Animal对象.因此,我们需要将Animal类也申明为抽象的.我们通过在Animal类定义的开始行添加abstract要害字来实现这一点.子类重载它们基类的方法的能力就是多态.多态使得子类能够使用基类的方法或是在这些方法不足的时候重载它们.这就实现了代码重用,加快了代码的实现过程,而且它还隔离和程序中的bug,使得程序的维护更轻易.
  
  总结
  在本文中,我们学习了如何确定潜在的对象.我们还学习了如何使用继续和多态来加快我们的代码实现过程并隔离错误,这使得代码的维护过程更加轻易.下一次,我们将展开讨论多态和继续的概念并开始我们对动态绑定的讨论.
上一篇:BEATuxedo开发心得 人气:555
下一篇:java加密 人气:951
浏览全部Java的内容 Dreamweaver插件下载 常用网页广告代码全集
  最新网站源码 最新软件下载
2008-10-10 企业网站智能管理系统(TZIMS) v6
2008-10-10 拓文asp.net网站内容管理系统 v6
2008-10-10 动网论坛PHP版 v2.0++ Build 081
2008-10-10 免费时代CMS v5.0
2008-10-10 wodig第四季中文DIGG社区 v4.1 b
2008-10-10 老Y文章管理系统 v2.2 bulid 081
2008-10-10 魔法盒动感相册 ASP+SQL版 v2.0
2008-10-10 Asoft签到管理系统 v3.0 Pack1
2008-10-10 哥特人音乐网潮流留言本 v1.1
2008-10-11 TN5250-AS/400商用服务器 v1.1破
2008-10-11 TVForecast电视节目导航 v1.0 破
2008-10-11 Spend花销明细 v1.25 破解版
2008-10-11 SpaceEnvi空间画廊 v1.0.2 破解版
2008-10-11 VoiceDial语音拨号 v1.0 破解版
2008-10-11 SonicLighter神圣火焰杯 v1.0 破
2008-10-11 Folders文件保护 v1.3破解版
2008-10-11 iProtractor量角器 v0.95破解版
2008-10-11 Fring多平台通讯软件 v1.0.1.4破
  发表评论
姓 名: 验证码:
内 容:
站长工具:网站收录查询 | Google PR查询 | ALEXA排名查询 | CSS在线编辑器 | 广告代码 | js/vbs加密 | md5加密 | 进制转换 | UTF-8 转换工具 | Html转换js | Html转换asp | Html转换php | Html转换perl
实用工具:汉字翻译拼音 | 拼音字典 | 符号对照表 | 个税计算 | 实时汇率查询换算 | 经典小工具 | 汉字简繁转换 | 普通单位换算 | 公制单位换算 | 生辰老黄历 | 国内电话区号 | 国家代码与域名缩写 | 文字加密解密 | 健康查询 | 万年历 | 汉字横竖排版 | 手机号码查询 | 计算器 | ip搜索
业务联系 | 广告刊登 | 频道合作 | 投稿荐稿 | 联系方式 | 加入收藏 | RSS订阅
Copyright © 2000-2008 www.knowsky.com All rights reserved | 网络实名:动态网站制作指南 | 沪ICP备05001343号
ホームページ制作 不動産検索システム 求人情報
防水工事·改修工事 フットサル大会 探偵
SEO対策 中国語教室 ホームページ作成