知识大全 面向对象思想之 -- 理解类和对象

Posted

篇首语:殷殷之情俱系华夏,寸寸丹心皆为家国。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 面向对象思想之 -- 理解类和对象相关的知识,希望对你有一定的参考价值。

  上一次在 使用Java开始面向对象的编程 这篇文章中 我们学习了一个编程语言要真正成为面向对象的 它应该支持信息隐藏/封装 多态 继承和动态绑定 另外 我们知道了Java完全支持这些功能 而且知道了因为Java是一种解释性的语言并运行在虚拟机的内部 所以由Java写成的任何程序都可以在任何支持 Java虚拟机(JVM)的操作系统上运行 我们还明白了对象是代表现实生活中事物的软件 编程模型以及对象是由它们的状态和行为定义的 最后 我们知道了Java中除了原始数据对象以外一切都是对象     因为这种程序设计风格中的这许多内容都和对象以及类有关 我们将在下面进一步的考察它们      对象详论  使用对象的一个关键是当你在浏览系统分析文档或者设计文档的时候如何来确定它们 因为对象一般代表人 地方或者事物 所以一个确定对象的基本的方法就是找出句子中所使用的名词 这里有一个简单的例子 在句子 一个顾客可以拥有多于一个的银行帐号 我们就确定了两个对象 客户和帐号 在句子 小猫喵喵叫 中 我们能够确定一个对象 猫      类详论  前面 我们学习了一个类是定义了对象如何动作以及当对象创建或者说实例化的时候应该包含些什么的实体 在对动物的讨论中 我们可以说 狗儿汪汪叫 猫喵喵叫 鸭子嘎嘎叫 确定句子中的对象我们就得到了狗 猫和鸭子 至于汪汪叫 喵喵叫 嘎嘎叫 那都是我们对象发出的行为动作     要实现这些对象 我们需要创建三个对象分别叫Dog Cat和Duck 要实现它们的行为 我们可以为每一个这些对象创建代表每个对象发出的声音的方法 而且我们把这个方法叫做speak或者 如果我们发挥想象力的话还可以把这个方法叫做sayHello     在程序的上下文中为了演示这些概念 让我们修改上篇文章中的HelloWorld程序 添加这三个新对象并给它们中的每一个添加sayHello方法 如下所示:    public class HelloWorld      public static void main(String[] args)          Dog animal = new Dog();      Cat animal = new Cat();      Duck animal = new Duck();      animal sayHello();      animal sayHello();      animal 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 animal = new Dog();      Cat animal = new Cat();      Duck animal = new Duck();      System out println( A dog says +animal getHello()      + is carnivorous: +animal isCarnivorous()      + is a mammal: +animal isAMammal());        System out println( A cat says +animal getHello()      + is carnivorous: +animal isCarnivorous()      + is a mammal: +animal isAMammal());        System out println( A duck says +animal getHello()      + is carnivorous: +animal isCarnivorous()      + is a mammal: +animal 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 使得程序的维护更容易      总结  在本文中 我们学习了如何确定潜在的对象 我们还学习了如何使用继承和多态来加快我们的代码实现过程并隔离错误 这使得代码的维护过程更加容易 下一次 我们将展开讨论多态和继承的概念并开始我们对动态绑定的讨论 cha138/Article/program/Java/hx/201311/26732

相关参考

知识大全 面向对象思想之 -- 限制对象属性的访问

  虽然Java只支持从一个父类继承但它使用接口的方式支持多重继承  接口实现了多态使得我们能够给与对象不同特性以满足不同的需要  你可以使用多态机制让完成相似功能的不同的方法拥有相同的名字但是拥有不

知识大全 黑马程序员面向对象之多态

  多态可以理解为事物存在的多种体现形态  多态的体现  父类的引用指向了自己的子类对象  父类的引用也可以接收自己的子类对象  多态的前提  必须是类与类之间有关系要么继承要么实现  通常还有一个前

知识大全 如此理解面向对象编程

  从RobPike的Google+上的一个推看到了一篇叫《UnderstandingObjectOrientedProgramming》的文章我先把这篇文章简述一下然后再说说老牌黑客RobPike的

知识大全 剖析ASP.NET AJAX的面向对象思想

剖析ASP.NETAJAX的面向对象思想  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  人们期待

知识大全 剖析ASP.NET AJAX的面向对象思想[3]

剖析ASP.NETAJAX的面向对象思想[3]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  接

知识大全 剖析ASP.NET AJAX的面向对象思想[2]

剖析ASP.NETAJAX的面向对象思想[2]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  继

知识大全 剖析ASP.NET AJAX的面向对象思想[1]

剖析ASP.NETAJAX的面向对象思想[1]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  人

知识大全 PHP学习笔记之面向对象设计

PHP学习笔记之面向对象设计  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  面向对象设计是php

知识大全 我的面向对象程序观

  我的面向对象程序观    )面向对象概念的一些误解    面向对象是一个如今被人叫烂的词汇就像去年人们都喜欢把自己的公司打上的标记一样其实有多少人能真正理解这个词汇呢很难说我喜欢这样来比喻人们对对

知识大全 面向对象三大特性之封装

  java学习已经到了最核心的章节面向对象的三大特性封装继承和多态接下来会写多篇博文(数目不定请关注近期博客吧!午饭们!)来总结这里面的每一个细节小可很希望每一篇文章的阐述会给你带来一点启发小可也是