`

设计模式学习笔记二:面向对象基础三之多态

    博客分类:
  • .Net
阅读更多

多态
    多态是面向对象的第三大特性。多态表示不同的对象可以执行相同的动作,但要通过他们自己的实现代码来执行。举例说明:
国粹京剧以前都是子承父业,代代相传的艺术,假设有一对父子,父亲是非常出名的京剧艺术家,儿子也已长大成人,且模仿父亲的戏惟妙惟肖。有一天父亲病了,不能登台演出,而票早就卖出,退票是会严重影响声誉。怎么办呢?由于京剧是化妆后表演,于是最好的办法就是由儿子待父亲上台表演。
    这里面有几点注意:第一,子类以父类的身份出现。儿子代表老子表演,化妆后就是一父亲的身份出现了。第二 ,子类在工作中以自己的方式来实现。儿子模仿的再好,儿子也只能以自己理解的表现方式去模仿父亲的表演。第三,子类以父类的身份出现时,子类特有的属性和方法不可以使用。儿子通过多年的学习,其实早已有了自己的东西。但在此时,代表父亲表演,绝对是不能表现出来的。这就是多态
    虚方法:为了使子类的实例完全接替来自父类的类成员,父类必须将该成员声明为虚拟的。这是通过再改成员的返回类型前加virtual关键词来实现。通常虚拟的是方法。其实除了字段不能是虚拟的外,属性、事件、和索引器都可以是虚拟的。尽管方法可以是虚拟的,但虚方法还是有方法体,可以实际做些事。子类可以选择使用override关键字,将父类实现替换为他自己的实现,这就是方法重写Override,或叫做方法覆写。
    动物基类:

    /// <summary>
    
///父类
    
/// </summary>
    public class Animal
    {
         
protected string name = "";
         
protected int shoutNum = 3;
         
public Animal(string name)
         {
             
this.name = name;
         }
         
public Animal()
         {
             
this.name = "无名";
         }
        
/// <summary>
        
/// 虚方法
        
/// </summary>
        
/// <returns></returns>
        public virtual string Shout()
        {
            
return "";
        }
    }

猫子类:

    /// <summary>
    
/// Cat子类
    
/// </summary>
    public class Cat:Animal 
    {
        
public Cat()
            : 
base()
        { }
        
public Cat(string name)
            : 
base(name)
        { }

        
public override string Shout()
        {
            
string result = "";
            
for (int i = 0; i < shoutNum; i++)
            {
                result 
= result + "嘧,";
            }
            
return "我的名字叫" + name + " " + result; 
        }
    }

狗子类:

    /// <summary>
    
/// Dog子类
    
/// </summary>
    public class Dog : Animal
    {
        
public Dog()
            : 
base()
        { }
        
public Dog(string name)
            : 
base(name)
        { }

        
public override string Shout()
        {
            
string result = "";
            
for (int i = 0; i < shoutNum; i++)
            {
                result 
= result + "汪,";
            }
            
return "我的名字叫" + name + " " + result;
        }
    }


动物叫声大赛:

    public class Match
    {
        
private Animal[] arrAnimal;

        
private string  ShoutMatch()
        {
            
string Result = "";
            arrAnimal 
= new Animal[2];
            arrAnimal[
0= new Cat("小花");
            arrAnimal[
1= new Dog("阿毛");

            
foreach (Animal item in arrAnimal)
            {
                Result 
= Result + item.Shout()+";";
            }
            
return Result;
        }
    }


    Animal相当于京剧的父亲,Cat和Dog相当于儿子,儿子代表父亲表演Shout,但是Cat叫出来的嘧,Dog叫出来的汪。这就是不同的对象可以执行相同的动作,但要通过他们自己的实现代码来执行。
    注意:对象的声明必须是父类,而不是子类,实例化的对象是子类。
    多态的原理是当方法被调用时,无论对象是否被转化为其父类,都只有位于对象继承链最末端的方法实现会被调用。也就是说,虚方法是按照其运行时类型而非编译时类型进行动态绑定调用。

分享到:
评论

相关推荐

    《设计模式学习笔记》

    《设计模式学习笔记》主要探讨了GOF的23种设计模式以及类设计的基本原则,旨在帮助开发者理解和应用这些经过时间验证的成熟解决方案。设计模式是面向对象软件设计中的核心概念,它们为解决常见的设计问题提供了标准...

    C#设计模式学习笔记

    以下是对“C#设计模式学习笔记”中涉及的一些关键知识点的详细解释。 1. **设计模式的基本概念**: 设计模式是一种在特定上下文中已被证明有效的解决方案模板,它描述了如何在软件设计中解决常见问题。设计模式...

    多态和接口学习笔记

    多态性是面向对象编程的三大特性之一,另外两个是封装和继承。接口则提供了类之间的抽象连接,允许不同类实现相同的功能。 **一、多态** 多态是指同一种行为可以有多种不同的形态,它允许我们用一个父类型的引用去...

    Java 基础 第2阶段:面向对象编程-尚硅谷学习笔记(含面试题) 2023年

    面向对象编程是Java的核心特性,本学习笔记涵盖了这一主题的深度探索,旨在帮助开发者深入理解并熟练运用面向对象的思想。2023年的版本更新可能包含最新的面试趋势和技术发展。以下将详细介绍Java面向对象编程的一些...

    软件设计师中级王勇老师课程笔记-9面向对象

    #### 三、面向对象的设计模式 设计模式是面向对象设计中常用的一套最佳实践,主要包括: 1. **创建型模式**:用于创建对象的过程,常见的有工厂方法、抽象工厂、单例、建造者和原型模式。 2. **结构型模式**:关注...

    java学习笔记及设计模式

    Java学习笔记及设计模式是程序员进阶过程中必不可少的资源,涵盖了广泛的Java基础知识和高级概念,同时结合了设计模式这一软件工程的重要组成部分。本资源集合旨在帮助开发者深化对Java语言的理解,提升编程技能,并...

    面向对象学习笔记········

    本学习笔记将深入探讨面向对象的基本概念、原则以及常见设计模式。 1. **基本概念** - **对象**:对象是类的实例,具有属性(数据成员)和方法(函数成员)。对象是现实世界中的实体在程序中的抽象。 - **类**:...

    23种设计模式的解析与Cpp实现

    C++实现这些设计模式时,会涉及到面向对象的特性,如类、继承、多态等。理解并熟练运用这些设计模式,能帮助开发者编写出更高效、更具扩展性的代码。通过“23种设计模式的解析与C++实现.pdf”和“Source”文件,读者...

    Java基础尚硅谷宋红康学习笔记

    理解封装、继承和多态是Java面向对象编程的关键概念。 3. **数组与集合**:数组用于存储固定数量的同类型元素,而集合框架(如ArrayList、LinkedList、HashSet、HashMap等)则提供了动态存储和操作对象的能力。 4....

    java学习笔记markdown

    2. **面向对象编程**:深入讲解Java的面向对象特性,包括类、对象、封装、继承、多态等概念。这部分内容是Java的核心,有助于理解如何构建可维护和可扩展的软件系统。 3. **集合框架**:详细解释ArrayList、...

    软考-软件设计师精华知识点笔记【第七章 面向对象技术】

    这一章的知识点涵盖了面向对象编程的基本原理、设计模式以及在实际开发中的应用。以下是对这些知识点的详细解析: 1. **面向对象的基本概念** - **对象**:面向对象编程的核心是对象,它封装了数据(属性)和行为...

    Java学习笔记.pdf

    本资源提供了一个系统的 Java 学习笔记,涵盖了 Java 基础、面向对象、Java SE 核心等方面的知识,旨在帮助初学者快速掌握 Java 开发的基本概念和思路。 1. Java 基础 Java 是一种高级的编程语言,它具有平台独立...

    C++面向对象程序设计(第二版)-谭浩强-课件

    《C++面向对象程序设计(第二版)》是谭浩强教授主编的一本经典教材,主要针对C++语言的面向对象特性进行深入讲解。面向对象编程(Object-Oriented Programming,简称OOP)是现代软件开发中广泛采用的方法,它以类和...

    Java 学习笔记Java学习笔记

    它的设计目标是具有简单性、面向对象、健壮性、安全性、可移植性、高性能和多线程等特性。Java的学习涵盖了许多方面,包括基础语法、类与对象、异常处理、集合框架、IO流、网络编程、多线程、数据库操作、Swing GUI...

    软件设计师学习笔记.pdf

    三、面向对象编程 面向对象编程(OOP)是软件设计的主要范式。笔记将详细介绍类、对象、封装、继承、多态等概念,以及如何利用这些概念构建可扩展、可维护的软件系统。 四、数据结构与算法 高效的数据结构和算法是...

    java学习笔记

    以上便是从给定文件的内容中整理出的Java学习笔记的知识点概览,包括Java基础、语言基础、面向对象编程、JavaSE核心I、JavaSE核心II以及Oracle数据库与SQL操作。这些知识点构成了Java学习的重要组成部分,为Java编程...

    Java_se基础毕向东老师全程笔记

    这份笔记由毕向东老师授课,涵盖了Java的基础知识及进阶主题,具体章节包括编程基础、数组、面向对象程序设计等多个方面。接下来,我们将详细探讨每一章的主要内容。 ### 第一章:编程基础 #### 1. Java的特性和...

    Java入门学习笔记

    "Java入门第三季学习笔记"可能涵盖了更多高级话题,如反射、注解、设计模式和Java库的使用。反射允许程序在运行时检查类、接口、字段和方法的信息,提供了更大的灵活性。注解是一种元数据,可以用来提供编译器或运行...

    清华Java语言与面向对象程序设计

    《清华Java语言与面向对象程序设计》是一门深入讲解Java编程和面向对象设计的课程,旨在帮助学习者掌握Java编程的基础知识以及如何运用面向对象的思想进行软件开发。课程内容覆盖了从基本语法到高级特性,从理论概念...

Global site tag (gtag.js) - Google Analytics