多态性

20.面向对象-----多态性

痴心易碎 提交于 2020-03-29 15:44:46
一、多态性的理解   一个事物的多种形态。 二、对象的多态性   父类的引用指向子类的对象。 例如: Person p = new Man();//Man是Person的子类 Object obj = new Date(); 说明:    Java引用变量有两个类型:编译时类型和运行时类型。编译时类型由声明该变量时使用的类型决定,运行时类型由实际赋给该变量的对象决定。简称:编译时,看左边;运行时,看右边。如果编译时的类型和运行时的类型不一致,就出现了对象的多态性。 举例: public class test { public static void main(String[] args) { Animal animal = new Cat(); //实际执行的是子类重写后的eat() animal.eat(); } } class Animal{ String name; int age; public void eat(){ System.out.println("动物进食"); } } class Cat extends Animal{ public void eat(){ String ability; System.out.println("猫类进食"); } } 三、虚拟方法调用   子类继承父类以后,对父类中的方法进行类重写。实例化父类的引用执行子类的对象(多态性)

依赖注入(转摘)

故事扮演 提交于 2020-03-08 09:01:58
依赖注入产生的背景: 随着面向对象分析与设计的发展,一个良好的设计,核心原则之一就是将变化隔离,使得变化部分发生变化时,不变部分不受影响(这也是OCP的目的)。为了做到这一点,要利用面向对象中的多态性,使用多态性后,客户类不再直接依赖服务类,而是依赖于一个抽象的接口,这样,客户类就不能在内部直接实例化具体的服务类。但是,客户类在运作中又客观需要具体的服务类提供服务,因为接口是不能实例化去提供服务的。就产生了“客户类不准实例化具体服务类”和“客户类需要具体服务类”这样一对矛盾。为了解决这个矛盾,开发人员提出了一种模式: 客户类(如上例中的Role) 定义一个 注入点(Public成员Weapon), 用于 服务类(实现IAttackStrategy的具体类,如WoodSword、IronSword和MagicSword,也包括以后加进来的所有实现IAttackStrategy的新类) 的注入,而 客户类的客户类(Program,即测试代码) 负责根据情况,实例化服务类,注入到客户类中,从而解决了这个矛盾。 依赖注入的正式定义: 依赖注入(Dependency Injection),是这样一个过程:由于某客户类只依赖于服务类的一个接口,而不依赖于具体服务类,所以客户类只定义一个注入点。在程序运行过程中,客户类不直接实例化具体服务类实例

依赖注入

杀马特。学长 韩版系。学妹 提交于 2020-03-08 09:01:12
  依赖注入(Dependency Injection),是这样一个过程:由于某客户类只依赖于服务类的一个接口,而不依赖于具体服务类,所以客户类只定义一个注入点。在程序运行过程中,客户类不直接实例化具体服务类实例,而是客户类的运行上下文环境或专门组件负责实例化服务类,然后将其注入到客户类中,保证客户类的正常运行。 一、依赖注入的类别 1.1 Setter注入   Setter注入(Setter Injection)是指在客户类中,设置一个服务类接口类型的数据成员,并设置一个Set方法作为注入点,这个Set方法接受一个具体的服务类实例为参数,并将它赋给服务类接口类型的数据成员。 public interface IServiceClass {   String ServiceInfo(); } public class ServiceClassA : IServiceClass {   public String ServiceInfo()   {     return "服务类A";   } } public class ServiceClassB : IServiceClass {   public String ServiceInfo()   {     return "服务类B";   } } public class ClientClass {   private

面向对象概述

痴心易碎 提交于 2020-03-05 23:49:40
三大特性 封装 继承 多态 多态 定义 多态性是指相同的操作或函数、过程可作用于多种类型的对象上并获得不同的结果。不同的对象,收到同一消息可以产生不同的结,这种现象称为多态性。 多态性允许每个对象以适合自身的方式去响应共同的消息 区分重载 方法重载提供了 创建同名的多个方法 的能力,但这些方法需使用不同的参数类型 (构造方法、普通方法都可以重载)。 方法重载时, 必须要方法名相同,但参数类型或个数必须要有所不同。 方法重载可在不改变原方法的基础上,新增功能。 来源: CSDN 作者: SuperSources 链接: https://blog.csdn.net/qq_45654306/article/details/104683495

JavaSE基础知识

一世执手 提交于 2020-03-05 22:44:42
Java 面向对象 1. 面向对象都有哪些特性以及你对这些特性的理解 1) 继承 : 继承是从已有类得到继承信息创建新类的过程。提供继承信息的类被称为父类 ( 超类、基类 ); 得到继承信息的类被称为 子类(派生类)。 2) 封装 : 通常认为封装是把数据和操作数据的方法绑定起来,对数据的访问只能通过已定义的接口。 封装就是隐藏一切可隐藏的东西,只向外界提供简单的编程接口。 3) 多态性 : 多态性是指允许不同子类型的对象对同一消息作出不同的响应。 简单的说就是用同样的对象引用调用同样的方法但是做了不同的事情。 多态性分为 编译时的多态性和运行时的多态性 。 方法重载( overload )实现的是编译时的多态性(也称为前绑定) , 而方法重写 ( override )实现的是运行时的多态性(也称为后绑定)。 运行时的多态是面向对象 精髓的东西, 要实现多态需要做两件事: 1. 方法重写(子类继承父类并重写父类中已有的或抽象的方法); 2. 对象造型(用父类型引用引用子类型对象,这样同样的引用调用同样的方法就会根据子类对象的不同而表现出不同的行为)。 4) 抽象 : 抽象是将一类对象的共同特征总结出来构造类的过程,包括数据抽象和行为抽象两方面。 2. 访问权限修饰符 public、private、protected, 以及不写(默认)时的区别 修饰符 当前类 同 包 子 类 其他包

C# 多态性

烂漫一生 提交于 2020-03-05 01:29:40
多态性 意味着有多重形式。在面向对象编程范式中,多态性往往表现为"一个接口,多个功能"。 多态性可以是静态的或动态的。在 静态多态性 中,函数的响应是在编译时发生的。在 动态多态性 中,函数的响应是在运行时发生的。 静态多态性 在编译时,函数和对象的连接机制被称为早期绑定,也被称为静态绑定。C# 提供了两种技术来实现静态多态性。分别为: 函数重载 运算符重载 运算符重载将在下一章节讨论,接下来我们将讨论函数重载。 函数重载 您可以在同一个范围内对相同的函数名有多个定义。函数的定义必须彼此不同,可以是参数列表中的参数类型不同,也可以是参数个数不同。不能重载只有返回类型不同的函数声明。 下面的实例演示了几个相同的函数 print() ,用于打印不同的数据类型: using System; namespace PolymorphismApplication { class Printdata { void print(int i) { Console.WriteLine("Printing int: {0}", i ); } void print(double f) { Console.WriteLine("Printing float: {0}" , f); } void print(string s) { Console.WriteLine("Printing string: {0}

面向对象的软件开发方法

早过忘川 提交于 2020-03-04 15:45:31
一、了解什么是面向对象的软件开发方法 答:1、OOSD是一种把面向对象的思想应用于软件开发过程,是一种当今成熟的、普遍流行的软件开发方法 2、面向对象方法的解决思路是从现实世界中的客观对象入手,尽量运用人类的自然思维方式来构造软件系统。是一种运用对象、类、继承、封装、聚合、消息传送、多态性等概念来构造系统的软件开发方法。 3、面向对象方法中,把一切都看成是对象。对象是功能抽象和数据抽象的统一,较过程稳定。 二、面向对象软件开发的主要思想 答:1、按照人类的自然思维的方式,对客观世界建立软件模型。 2、客观实体和实体之间的联系构成了现实世界的所有问题。 3、面向对象技术将现实世界中的实体及相互关系映射为对象及对象间的关系,实体间的相互作用被映射为对象间的消息发送等。 三、面向对象方法的主要优点 答:(1)把易变的数据结构和部分功能封装在对象内并加以隐藏 i、保证了对象行为的可靠性。 ii、对其修改并不会影响其它对象,有利于维护,对需求变化有较强的适应。 (2)封装性和继承性有利于复用对象 i、把对象的属性和操作捆绑在一起,提高了对象(作为模块)的内聚性,减少了与其它对象的耦合,为复用对象提供了可能性和方便性。(高内聚,低耦合) ii、在继承结构中,特殊类对一般类的继承,本身就是对一般类的属性和操作的复用。 四、面向对象开发方法的组成 答:(1)OOA(Object-Oriented

01 15Java中级之多态性

故事扮演 提交于 2020-02-28 01:08:10
文章目录 1 多态性简介 2 对象向上转型(接受或返回参数的统一性) 3 对象向下转型 4 instanceof关键字 1 多态性简介 面向对象的第三大主要特征。实现父子类之间的相转换处理。 多态性两种实现模式: (1)方法的多态性: |———— 方法重载:同一个方法名称可以根据传入的参数的类型或个数的不同实现不同功能的执行。 |———— 方法覆写:同一个方法可能根据使用子类的不同有不同的实现。 (2)对象的多态性:父子实例之间的转换处理,他有两种模式。 |———— 对象向上转型:父类 父类实例 = 子类实例,自动完成转换; |———— 对象向下转型:子类 子类实例 = (子类)父类实例,强制完成转换。 从实际的转型处理来讲,大部分情况下考虑最多的一定是对象的向上转型。 2 对象向上转型(接受或返回参数的统一性) 对象转型的处理属于多态性,这一特性必须在继承性的基础上实现。看实例化的是哪个子类,方法有无覆写。 向上转型的主要特点在于可以对参数统一设计。为什么不使用重载呢?还要考虑可维护性的设计,如果父类产生许多子类,每当增加一个子类,都需要重新重载此方法,造成可维护性差。 3 对象向下转型 向下转型的主要特点在于需要使用到子类的一些特殊方法的处理。 向上描述的是一些公共的特征,而向下描述的是子类自己特殊的定义环境。但是我们需要明确的是向下转型并不是一件安全的事情

C++ 继承的多态性: 重载父类函数(虚方法)

社会主义新天地 提交于 2020-02-07 21:49:42
C++ 的继承复杂, 在 上一章 中讲解了基础部分 在用的时候不妨会想到: 如果在派生类中重载了基类的函数呢? 那么这就是本篇要讲的----继承的多态性. 百度百科 中对继承的多态性有详细的解释:   多态性就是 多种表现形式 ,具体来说,可以用" 一个对外接口,多个内在实现方法 "表示。举一个例子,计算机中的堆栈可以存储各种格式的数据,包括整型,浮点或字符。不管存储的是何种数据,堆栈的算法实现是一样的。针对不同的数据类型,编程人员不必手工选择,只需使用统一接口名,系统可自动选择。   C++的多态性:在基类的函数前面加上 virtual 关键字,在派生类中重写该函数,运行时将会根据对象的实际类型来调用相应的函数。如果对象类型是派生类,就调用派生类的函数;如果对象类型是基类,就调用基类的函数。 父类被标有 virutual 的函数称为: 虚方法 . 在子类中重载基类的函数只要在父类函数声明部分加上 override 关键字即可. 再说白一点, 也就是将父类某函数的功能替换掉了, 但是函数的 '外观' 没有变: #include <iostream> class Father { public: virtual void get() // 创建了一个虚方法 { std::cout<<"Father"<<std::endl; } }; class Child: public

多态性----类型强制转换

☆樱花仙子☆ 提交于 2020-02-07 08:05:54
强制类型转换的只是引用类型,真正指向的对象是不会发生变化的,可以将引用看作看待对象的角度,层次。这就像可以将红富士看作苹果,也可以看作水果一样,看待的角度、层次虽然变了,但苹果还是那个苹果。 来源: https://www.cnblogs.com/chr1978/p/12271844.html