多态
多态是面向对象的第三大特性。多态表示不同的对象可以执行相同的动作,但要通过他们自己的实现代码来执行。举例说明:国粹京剧以前都是子承父业,代代相传的艺术,假设有一对父子,父亲是非常出名的京剧艺术家,儿子也已长大成人,且模仿父亲的戏惟妙惟肖。有一天父亲病了,不能登台演出,而票早就卖出,退票是会严重影响声誉。怎么办呢?由于京剧是化妆后表演,于是最好的办法就是由儿子待父亲上台表演。
这里面有几点注意:第一,子类以父类的身份出现。儿子代表老子表演,化妆后就是一父亲的身份出现了。第二 ,子类在工作中以自己的方式来实现。儿子模仿的再好,儿子也只能以自己理解的表现方式去模仿父亲的表演。第三,子类以父类的身份出现时,子类特有的属性和方法不可以使用。儿子通过多年的学习,其实早已有了自己的东西。但在此时,代表父亲表演,绝对是不能表现出来的。这就是多态。
虚方法:为了使子类的实例完全接替来自父类的类成员,父类必须将该成员声明为虚拟的。这是通过再改成员的返回类型前加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#设计模式学习笔记”中涉及的一些关键知识点的详细解释。 1. **设计模式的基本概念**: 设计模式是一种在特定上下文中已被证明有效的解决方案模板,它描述了如何在软件设计中解决常见问题。设计模式...
多态性是面向对象编程的三大特性之一,另外两个是封装和继承。接口则提供了类之间的抽象连接,允许不同类实现相同的功能。 **一、多态** 多态是指同一种行为可以有多种不同的形态,它允许我们用一个父类型的引用去...
面向对象编程是Java的核心特性,本学习笔记涵盖了这一主题的深度探索,旨在帮助开发者深入理解并熟练运用面向对象的思想。2023年的版本更新可能包含最新的面试趋势和技术发展。以下将详细介绍Java面向对象编程的一些...
#### 三、面向对象的设计模式 设计模式是面向对象设计中常用的一套最佳实践,主要包括: 1. **创建型模式**:用于创建对象的过程,常见的有工厂方法、抽象工厂、单例、建造者和原型模式。 2. **结构型模式**:关注...
Java学习笔记及设计模式是程序员进阶过程中必不可少的资源,涵盖了广泛的Java基础知识和高级概念,同时结合了设计模式这一软件工程的重要组成部分。本资源集合旨在帮助开发者深化对Java语言的理解,提升编程技能,并...
本学习笔记将深入探讨面向对象的基本概念、原则以及常见设计模式。 1. **基本概念** - **对象**:对象是类的实例,具有属性(数据成员)和方法(函数成员)。对象是现实世界中的实体在程序中的抽象。 - **类**:...
C++实现这些设计模式时,会涉及到面向对象的特性,如类、继承、多态等。理解并熟练运用这些设计模式,能帮助开发者编写出更高效、更具扩展性的代码。通过“23种设计模式的解析与C++实现.pdf”和“Source”文件,读者...
理解封装、继承和多态是Java面向对象编程的关键概念。 3. **数组与集合**:数组用于存储固定数量的同类型元素,而集合框架(如ArrayList、LinkedList、HashSet、HashMap等)则提供了动态存储和操作对象的能力。 4....
2. **面向对象编程**:深入讲解Java的面向对象特性,包括类、对象、封装、继承、多态等概念。这部分内容是Java的核心,有助于理解如何构建可维护和可扩展的软件系统。 3. **集合框架**:详细解释ArrayList、...
这一章的知识点涵盖了面向对象编程的基本原理、设计模式以及在实际开发中的应用。以下是对这些知识点的详细解析: 1. **面向对象的基本概念** - **对象**:面向对象编程的核心是对象,它封装了数据(属性)和行为...
本资源提供了一个系统的 Java 学习笔记,涵盖了 Java 基础、面向对象、Java SE 核心等方面的知识,旨在帮助初学者快速掌握 Java 开发的基本概念和思路。 1. Java 基础 Java 是一种高级的编程语言,它具有平台独立...
《C++面向对象程序设计(第二版)》是谭浩强教授主编的一本经典教材,主要针对C++语言的面向对象特性进行深入讲解。面向对象编程(Object-Oriented Programming,简称OOP)是现代软件开发中广泛采用的方法,它以类和...
它的设计目标是具有简单性、面向对象、健壮性、安全性、可移植性、高性能和多线程等特性。Java的学习涵盖了许多方面,包括基础语法、类与对象、异常处理、集合框架、IO流、网络编程、多线程、数据库操作、Swing GUI...
三、面向对象编程 面向对象编程(OOP)是软件设计的主要范式。笔记将详细介绍类、对象、封装、继承、多态等概念,以及如何利用这些概念构建可扩展、可维护的软件系统。 四、数据结构与算法 高效的数据结构和算法是...
以上便是从给定文件的内容中整理出的Java学习笔记的知识点概览,包括Java基础、语言基础、面向对象编程、JavaSE核心I、JavaSE核心II以及Oracle数据库与SQL操作。这些知识点构成了Java学习的重要组成部分,为Java编程...
这份笔记由毕向东老师授课,涵盖了Java的基础知识及进阶主题,具体章节包括编程基础、数组、面向对象程序设计等多个方面。接下来,我们将详细探讨每一章的主要内容。 ### 第一章:编程基础 #### 1. Java的特性和...
"Java入门第三季学习笔记"可能涵盖了更多高级话题,如反射、注解、设计模式和Java库的使用。反射允许程序在运行时检查类、接口、字段和方法的信息,提供了更大的灵活性。注解是一种元数据,可以用来提供编译器或运行...
《清华Java语言与面向对象程序设计》是一门深入讲解Java编程和面向对象设计的课程,旨在帮助学习者掌握Java编程的基础知识以及如何运用面向对象的思想进行软件开发。课程内容覆盖了从基本语法到高级特性,从理论概念...