精华内容
下载资源
问答
  • 什么叫多态,重载算不算多态

    千次阅读 2018-10-05 21:27:39
    1,同一操作作用于不同的对象,...一种是编译时期多态又叫静态多态,编译时期的多态是靠重载实现的,根据参数个数,类型和顺序决定的(必须在同一个类中) 另一种是运行时的多态,在运行时根据实际情况决定调用函数...

    1,同一操作作用于不同的对象,同一接口可产生不同的结果

    2,有两种多态:

    一种是编译时期多态又叫静态多态,编译时期的多态是靠重载实现的,根据参数个数,类型和顺序决定的(必须在同一个类中)

    另一种是运行时的多态,在运行时根据实际情况决定调用函数

    展开全文
  • 学习python的时候,也知道鸭子类型(ducking typing)这个说法,“当你看到一只鸟走起来像鸭子,游泳起来...按照书上的解释,鸭子类型是多态一种形式,这这种形式中,不管对象属于哪个类,也不管声明的具体接口是什么...

    59238e90b88d438bfe8b53651b005f77.png

    学习python的时候,也知道鸭子类型(ducking typing)这个说法,“当你看到一只鸟走起来像鸭子,游泳起来鸭子,叫起来也像鸭子,那么这只鸟就被称为鸭子类型”,字面上理解了,但是在Python中是如何体验的?这一点还真不太懂。今天在看书,又再次碰到这个玩意,于是决定把这个鸭子类型给整明白。

    按照书上的解释,鸭子类型是多态一种形式,这这种形式中,不管对象属于哪个类,也不管声明的具体接口是什么,只要对象实现了相应的方法,函数就可以在对象上执行操作。好吧,这句话如何理解呢?我们开始吧!

    简单理解什么是多态?

    首先要理解什么是多态,故名思意,多态就是多种状态,不同的对象调用出同一个接口,表现出多种状态。看示例1。

    #示例1
    class Animal():
        def who(self):
            print("I am an Animal")
    class Duck(Animal):
        def who(self):
            print("I am a duck")
    
    class Dog(Animal):
        def who(self):
            print("I am a dog")
    
    class Cat(Animal):
        def who(self):
            print("I am a cat")
    if __name__ == "__main__":
        duck=Duck()
        dog=Dog()
        cat=Cat()
        duck.who()
        dog.who()
        cat.who()

    在示例1中,我们定义了duck,dog和cat三个对象,每个对象都实现了who()方法。你看,他们的接口名称都是相同的,他们分别调用who()方法,但有有不同的输出,不同的表现。以下是输出结果:

    I am a duck
    I am a dog
    I am a cat

    好了,多态大概就是这么回事了。更详细的解释留在以后的文章吧!

    鸭子类型

    其实一般不会像上面那样去使用多态,更加优雅的写法见示例2。

    #示例2
    #此处省略Animal,Duck,Dog,cat的实现
    
    def func(obj):
        obj.who()
    
    if __name__ == "__main__":
        duck=Duck()
        dog=Dog()
        cat=Cat()
        func(duck)
        func(dog)
        func(cat)

    示例2中定义一个函数func(),这个函数对参数有一个要求,那就是参数必须有who()这个方法。不管你是什么对象,是duck对象也好,是dog对象也罢,只管对象实现who()方法就可。这就是鸭子类型,它根本不管你是什么对象,只要你有这个方法,有这个行为,表现得像鸭子,走起来像鸭子,游泳起来鸭子,叫起来也像鸭子,那么尽管你是一只会飞天的猪,也是称为鸭子类型。

    好了,以上就是小编对鸭子类型的理解,如果你有不同的建议,就联系小编一起讨论吧。

    欢迎关注公众号:CVpython,一个专注于分享Python教程和CV算法的公众号,欢迎来撩 !

    展开全文
  • 多态又叫向上转型 二、多态是发生在赋值的时候,多态发生的几种形式: 1、直接多态(直接声明的多态) 父类 变量=new 子类(); 2、形参和实参多态 方法参数定义时,使用父类定义,调用方法时,传递子类对象 3、返回值多态...

    多态

    一、什么是多态:父类引用指向子类对象(父类型声明的引用类型变量可以找到子类的对象,也就是子类对象的地址给到了父类引用类型的变量)
    多态又叫向上转型

    二、多态是发生在赋值的时候,多态发生的几种形式
    1、直接多态(直接声明的多态) 父类 变量=new 子类();
    2、形参和实参多态 方法参数定义时,使用父类定义,调用方法时,传递子类对象
    3、返回值多态 返回值类型定义为父类,返回数据的时候返回子类对象

    三、多态的优缺点
    缺点:丢失子类特有的属性,无法调用子类特有的属性,特有属性需要向下转型后,再进行访问
    优点:把不同的子类对象都当做父类来看,可以屏蔽不同子类对象之间的差异,写出通用的代码,以适应需求的不断变化

    四、多态发生的前提条件:必须是在有继承关系的体系中

    五、多态调用属性的规则
    1、如果调用的是父类没有的,直接报错,访问不了
    2、如果调用的是子类没有的,都访问父类的
    3、如果调用的是父类和子类都有的,那么除了成员方法调用子类的之外,其他的都调用父类的,因为成员方法可以覆写。

    六、多态如何使用?
    1、直接多态 若Animal是父类,Cat是子类,那么Animal a1=new Cat();是直接多态
    2、实参形参多态 若Animal是父类,Cat是子类,那么实参形参多态为
    Cat c1=new Cat();
    m1(c1);
    public static void m1(Animal a){

    }
    相当于Animal a=Cat c1
    3、返回值多态
    Animal a2=m2();
    public static Animal m2(){
    return new Cat();
    }
    4、隐式多态
    this类型是当前类类型,也就是this在哪个类中出现,this的类型就是这个类
    那么 这里的this 就等于是 SupClass this 那么 this的引用 是子类对象,再结合this 是当前类类型 所以成了这样 SupClass this = new SubClass();
    下面的main方法中执行subClass.m1()时,m1方法中的this发生了多态
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    七、Instanceof与向下转型
    多态又叫向上转型,可以看做自动类型转换,从子类到父类

    向下转型,可以看做强制类型转换,从父类到子类,必须先发生向上转型

    instanceof 判断该对象是否有某个类实例化而来
    在这里插入图片描述

    抽象类

    八、Abstract
    抽象类往往用来表示设计中得出的抽象概念,是对一系列看上去不同,但是本质上相同的具体概念的抽象。
    比如:动物,它只是一个抽象的概念,并没有一个 “东西”叫做 “动物”。所以,它并不能代表一个实体,这种情况下,我们就适合把它定义成抽象类。

    使用abstract 修饰的类,是抽象类, 抽象类的目的 : 该类不能被实例化对象,只能被继承

    使用abstract 修饰的方法,是抽象方法,抽象方法没有方法体,只有功能 定义,没有功能实现,用于让子类实现

    实现抽象方法,就是给抽象方法加上方法体,去掉abstract修饰

    抽象方法一定在抽象类中,但是抽象类中一定有抽象方法是不成立的,也可以没有,如果就想让某个类不能创建对象,也可以把该类创建类抽象类

    final与abstract

    • final修饰的类不能被继承,
    • final修饰的成员方法不能被覆写

    而 抽象类 就是用于被继承的,抽象方法就是用于被实现覆写的,所以 final 和 abstract 不能同时出现

    • 一个非抽象类如果要继承一个抽象类,必须要实现该类的所有抽象方法
    • 一个抽象类如果要继承一个抽象类 ,可以实现 0~N个抽象方法

    以下是代码示例:
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    接口

    九、interface

    • 接口是一种引用数据类型,可以看做是一种特殊的类,是java为了解决没有多继承引起的功能变弱的问题

    • 一个类只能有一个父类,但是可以实现N个接口

    • 创建接口的方式 由 class 变成了 interface 而 父子关系 用 extends 变成了 implements

    • 类和类 使用extends,并且单继承

    • 类和接口 使用 implements 多实现 多个以逗号隔开,比如 class A implements V,C,D

    • 并且 非抽象类实现接口后,必须实现所有的抽象方法

    • 抽象类实现接口后 可以实现 0~N个抽象方法

    • 接口和接口 使用 extends,并且是多继承 比如 interface A extends B,C,D

    • 语法 :
      public interface 接口名{

      }

    • 1 接口中 所有的变量 默认都是 public static final 的 也就是常量 ,而且 public static final 可以省略

    • 2 接口中的方法 默认都是 public abstract 的 也就是抽象方法,而且 public abstract 可以省略

    • 3 接口中没有构造方法,不能被实例化对象

    • 从 java1.8开始 接口中 可以有 默认方法和 静态方法

    • 接口可以看做是一个特殊的抽象类,所以很多时候 接口和抽象类都能做到某一件事

    • 优先使用接口,因为 类和接口之间是多实现, 当使用接口之后,还可以保留类的继承

    接口如何使用呢?
    以下是代码实现:

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    十、接口和抽象类

    在这里插入图片描述

    展开全文
  • JAVA基础之多态

    2015-06-27 22:38:36
    多态又叫动态绑定是指“在运行期间”(而非编译期间)来判断所引用的对象的实际类型,根据其实际类型调用其相应的方法。就是new出来什么对象就调用那个对象的方法 -------- 多态的三个条件:1.要有继承。2.要有...
    多态又叫动态绑定是指“在运行期间”(而非编译期间)来判断所引用的对象的实际类型,根据其实际类型调用其相应的方法。就是new出来什么对象就调用那个对象的方法
    --------
    多态的三个条件:1.要有继承。2.要有重写。3.父类引用指向子类对象

    三个条件缺一不可, 只针对与方法,对成员变量无效的

    /*

    父类

    */

    public class Animal {
    public void  sayHello(){
    System.out.print(" Hello !");
    }
    }

    /*

    子类

    */

    public class Cat extends Animal{
    public void  sayHello(){
    System.out.print(" Hello from cat !");
    }
    }


    /**
     * 测试类
     *
     */
    public class Test {


    public static void main(String[] args) {
    //父类对象实例化一个父类对象
    Animal animal = new Animal();

    animal.sayHello();

    System.out.print("\n");

    //父类对象指向子类实例化的对象
    Animal cat = new Cat();

    cat.sayHello();

    System.out.print("\n");

    //之类对象实例化一个之类对象
    Cat catt = new Cat();

    cat.sayHello();



    }


    }


    运行结果:

     Hello !
     Hello from cat !
     Hello from cat !


    分析:
    不难发现,cat是一个父类的对象,而由于指向了子类的一个实例,所有它实际上引用的是一个子类,从而调用sayHello这个方法是子类的方法,这就是多态。


    展开全文
  • C++多态学习笔记

    2016-11-26 17:25:57
    静态多态又叫早绑定,动态多态,应该是叫晚绑定。什么多态?不要觉得问题“很没用”,你还就是说不出来。同样的命令,不同的对象,做出不同的动作。这就得借助The King of Fighters来解释了。同样是“—>+B”的...
  • 对JAVA多态的理解

    2019-05-06 23:29:22
    多态又分为两种:静态多态 和 动态多态 静态多态 这里的静态是与static无关,那什么叫静态多态? 它是指:某个方法在编译期就确定了运行期调用的是哪个实现。 比如: 单独的方法重写 在继承关系中,子类拥有和父类...
  • C#面向对象-多态

    2020-05-02 08:20:11
    那么多态又包含了:重载,重写,虚方法,抽象方法。 1,重载什么叫重载?在同一个作用域的两个或多个方法函数名相同,参数列表不同的方法叫做重载。重载有三个特点:1.1:方法名必须相同。1.2:参数列表必须...
  • Java基础系列三之多态

    2020-04-15 21:46:10
    多态引言:什么叫多态呢?用通俗的话来说就是在同一时刻事物所呈现的不同状态例如 水:多态 固态 液态 气态 打个比方 父亲person有行为这个方法,里面包括几个动作:吃饭,睡觉,走路 父亲有三个儿子,三个儿子都...
  • 目录 1-1多态的概述与虚函数 1.什么多态? 2.多态的分类 ...1-1多态的概述与虚函数 1.什么多态?...指相同对象收到不同消息或不同对象收到相同消息...​ 又叫早绑定。 ​ 一个类中互为重载的函数的情况。 // ...
  • 对于子类继承于父类时,什么限制呢? 1 多态 多态是同一个行为具有多种不同表现形式或形态的能力。 举个栗子,一只鸡可以做成白切鸡、鼓油鸡、吊烧鸡、茶油鸡、盐焗鸡、葱油鸡、清蒸鸡、花鸡、啤酒鸡、口水鸡...
  • 什么叫多态呢?按照字面意思理解就是多种形态的意思。 还是举昨天的那个例子: 动物园里动物都得吃食物,兔子吃胡萝卜,猫吃鱼,狗吃肉。 同一行为(吃东西),通过不同的事物(兔,猫,狗),可以体现出不同的形态...
  • 泛型与多态的关系

    千次阅读 2011-03-24 13:39:00
    学习java5新特性有段时间了,关于泛型与多态的关系一直有些疑问,今天看资料时碰到了泛型,谈谈我的新理解。先看看什么叫泛型:Generic programming is a style of computer programming in which algorithms are ...
  • 面向对象的三大特征: 封装,继承,多态面向对象的编程思想核心:高类聚,低耦合–程序的设计模式范畴封装什么是封装:在面向对象编程的思想中,对代码进行高度封装,封装又叫包装封装就是指将数据或者函数等客观的事物封装...
  • 多态(动态绑定/后期绑定/运行时绑定)...后期绑定,是指在运行时根据对象的类型进行绑定,又叫动态绑定或运行时绑定。实现后期绑定,需要某种机制支持,以便在运行时能判断对象的类型,调用开销比前期绑定大。Java...
  • 当你看到一只鸟走起来想鸭子,游泳起来像鸭子,起来像鸭子,那么这只鸟就叫做鸭子类型 我们并不关心对象是什么类型,到底是不是鸭子,只关心行为。 我们只关心一个类被不同的魔法函数赋予了不同的特性,我们看他...
  •  封装(encapsulation)又叫隐藏实现(Hiding the implementation)。就是只公开代码单元的对外接口,而隐藏其具体实现。  其实生活中处处都是封装,手机,电脑,电视这些都是封装。你只需要知道如何去操作他们,并不...
  • 在面向对象编程的思想中,对代码进行高度封装,封装又叫包装 封装就是指将数据或者函数等客观的事物封装在在一个个的单元中,我们称之为类, 被封装的对象通常被称为抽象数据类型 简单的说,一个类就是一个封装了数据...
  • 面向对象的三大特征: 封装,继承,多态面向对象的编程思想核心:高类聚,低耦合–程序的设计模式范畴封装什么是封装:在面向对象编程的思想中,对代码进行高度封装,封装又叫包装封装就是指将数据或者函数等客观的事物封装...
  •  封装(encapsulation)又叫隐藏实现(Hiding the implementation)。就是只公开代码单元的对外接口,而隐藏其具体实现。  比如你的手机,手机的键盘,屏幕,听筒等,就是其对外接口。你只需要知道如何按键就可以...
  • 封装(encapsulation)又叫隐藏实现(Hiding the implementation)。就是只公开代码单元的对外接口,而隐藏其具体实现。 比如你的手机,手机的键盘,屏幕,听筒等,就是其对外接口。你只需要知道如何按键就可以使用...
  • 封装(encapsulation)又叫隐藏实现(Hiding the implementation)。就是只公开代码单元的对外接口,而隐藏其具体实现。 比如你的手机,手机的键盘,屏幕,听筒等,就是其对外接口。你只需要知道如何按键就可以使用...
  • 面向对象三大特性:封装,继承、多态。继承用一句话总结就是:父亲可以有很多儿子,但儿子只能有一个亲爹。继承描述的是事物之间的所属关系。看下图:动物是一个类,食草动物、食肉动物也是一个类。其中羊属于食草...
  • 设计模式-鸭子类型1

    2021-02-19 16:20:26
    什么是鸭子类型 ...鸭子类型跟多态又什么关系了?多态又是为了实现什么目的了? 对于为什么会出现对上面鸭子类型的定义,我想本质上是还是希望一个东西能够描述尽可能多的东西,这样创建的“类”才有意
  • 什么是javascript

    2010-03-26 21:32:00
    javascript是一种基于对象(object)和事件驱动(event driven)的脚本语言,有人就会问什么是基于对象什么又叫事件驱动呢?有过java或.net的程序员都知道面向对象的三大特点就叫(封装,继承,多态),而js中它可以new...
  • 什么是面向对象?

    2019-01-17 16:25:59
    阅读到一本书《程序员的自我修养》,当看到“面向对象”一词时,我感觉到既熟悉陌生。在本科大二时候学习Java课程的时候第一次知道了这个词,当时就觉得面向对象是相对于面向过程而言的,有继承、封装、多态三种...
  • 1、面向对象原本要解决什么(或者说有什么优良特性)似乎很简单,但实际很不简单:面向对象三要素封装、继承、多态(警告:事实上,从业界如此总结出这面向对象三要素的一刹那开始,就已经开始犯错了!)。封装:...
  • 什么是工厂模式?

    2013-04-19 14:22:21
    工厂方法模式(FactoryMethod Pattern)称为工厂模式,也虚拟构造器(Virtual Constructor)模式或者多态工厂(Polymorphic Factory)模式,它属于类创建型模式。在工厂方法模式中,工厂父类负责定义创建产品对象的...
  • 学习python的时候,也知道鸭子类型(ducking typing)这个说法,“当你看到一只鸟走起来像鸭子,游泳起来鸭子,起来也像鸭子,那么这只鸟就被称为鸭子类型”,字面上理解了,但是在Python中是如何体验的?...

空空如也

空空如也

1 2 3 4
收藏数 74
精华内容 29
关键字:

多态又叫什么