精华内容
下载资源
问答
  • java基础:多态实现方式 很多地方都写着多态三要素是: 继承、重写、向上转型。 所以继承实现多态我理解了,那么用接口实现多态的呢,它并不符合多态三要素。很困惑,希望大佬来解答一下!
  • 继承与多态实现方式

    2019-03-20 00:30:26
    继承: 接口继承与实现继承: 具体分为三种情况:1.只继承接口,派生类必须自己...继承三种方式: public:基类public成员与protect成员在派生类中保持原有属性,private成员仍为基类private成员,派生类不可访问...

    继承:

    接口继承与实现继承:

    具体分为三种情况:1.只继承接口,派生类必须自己编写实现代码(利用纯虚函数)2.继承接口和实现,但允许派生类自己编写代码替换基类实现代码(利用虚函数)3.继承接口和实现,不允许派生类修改函数代码(非虚函数)

    继承三种方式:

    public:基类public成员与protect成员在派生类中保持原有属性,private成员仍为基类private成员,派生类不可访问

    protect:基类public成员与protect成员均成为派生类的protect成员,private成员仍为基类private成员,派生类不可访问

    private:基类中public成员与protect成员均成为派生类的private成员,private成员仍为基类private成员,派生类不可访问

     publicprotectedprivate
    共有继承publicprotected不可见
    私有继承privateprivate不可见
    保护继承protectedprotected不可见

    多态:

    多台实现方式有两种:重载和覆盖(虚函数)。基类和派生类有各自的虚函数表和虚函数指针,虚函数指针指向自己的虚函数表。

    每个类用了一个虚表,每个类的对象用了一个虚指针,可以考虑一个小问题,虚表存储在哪块内存中(腾讯面试考过的哦)。具体的用法如下:

    class A
    {public:
        virtual void f();
        virtual void g();
    private:
        int a
    };
    
    class B : public A
    {
    public:
        void g();
    private:
        int b;
    };
    //A,B的实现省略

    因为A有virtual void f(),和g(),所以编译器为A类准备了一个虚表vtableA,内容如下:

    A::f 的地址

    A::g 的地址

    B因为继承了A,所以编译器也为B准备了一个虚表vtableB,内容如下:

    A::f 的地址

    B::g 的地址

    注意:因为B::g是重写了的,所以B的虚表的g放的是B::g的入口地址,但是f是从上面的A继承下来的,所以f的地址是A::f的入口地址。然后某处有语句 B bB;的时候,编译器分配空间时,除了A的int a,B的成员int b;以外,还分配了一个虚指针vptr,指向B的虚表vtableB,bB的布局如下:

    vptr : 指向B的虚表vtableB

    int a: 继承A的成员

    int b: B成员


    当如下语句的时候:
    A *pa = &bB;
    pa的结构就是A的布局(就是说用pa只能访问的到bB对象的前两项,访问不到第三项int b)
    那么pa->g()中,编译器知道的是,g是一个声明为virtual的成员函数,而且其入口地址放在表格(无论是vtalbeA表还是vtalbeB表)的第2项,那么编译器编译这条语句的时候就如是转换:call *(pa->vptr)[1](C语言的数组索引从0开始)。

     

    参考:https://blog.csdn.net/u013776495/article/details/51086862

    展开全文
  • java 多态实现方式

    2016-07-05 08:27:31
    条件:要有继承,重写,父类引用指向子类对象

    条件:要有继承,重写,父类引用指向子类对象

    展开全文
  • Java中三种多态实现方式

    万次阅读 2018-08-10 09:35:44
    1.普通类  AnimalFu a = new AnimalZi new(); 2.抽象类 animal 是父类抽象类 Animal a = new Cat(); 3.接口 // 学生是类 smoking 是接口  ...多态的特点: 变量:编译看父类 方法:运行看子类...

    1.普通类

     AnimalFu a =  new AnimalZi new();

    2.抽象类 animal  是父类抽象类

    Animal a = new Cat();

    3.接口 // 学生是类  smoking  是接口 

    Smoking sk = new Student() 

    多态的特点:

    变量:编译看父类

    方法:运行看子类

    展开全文
  • Java多态实现

    2012-08-29 13:02:56
    Java多态实现
  • c#多态实现方式

    2018-06-21 10:15:00
    1.多态概念:让一个对象能够表现出多种状态(类型)实现多态的条件:类必须具有继承。 2.实现多态的三种方法: 1)虚方法 2)抽象类 3)接口步骤:1)在父类的返回类型前加virtual ,表示成虚方法2)在子类的返回...

    1.多态概念:让一个对象能够表现出多种状态(类型)
    实现多态的条件:类必须具有继承。

    2.实现多态的三种方法: 1)虚方法  2)抽象类 3)接口
    步骤:1)在父类的返回类型前加virtual ,表示成虚方法
    2)在子类的返回类型前加override,表示将父类的方法重新写一遍。

    per[i].sayhello();//per[i]调用的是父类的方法,因为在子类中将其方法重写,故根据per[i]代表的是哪个子类对象,就表现出哪个子类的方法。
    2).抽象类
    当父类中的方法不知道如何去实现的时候,可以考虑将父类写成抽象类,将方法写成抽象方法。

    抽象类用abstract修饰,抽象方法在返回类型加abstract修饰。且抽象方法没有方法体。

    抽象类和接口是不允许创建自身对象的。
    static void Main(string[] args)
            {
                //用多态实现毛会叫,狗会叫

                //因为猫和狗不能产生继承关系,故需要申明抽象方法,和抽象类
                //Animal a = new Animal();//抽象类不能创建对象
                Animal animal = new Cat();//将子类对象赋给父类
                animal.bark();
                Animal ani = new Dog();
                ani.bark();
                Console.ReadKey();

            }
        }
        //定义抽象类
        public abstract class Animal
        {
            public abstract void bark();
        }

        public class Cat:Animal
        {
            public override void bark()
            {
                Console.WriteLine("猫,喵喵");
            }
        }

        public class Dog : Animal
        {
            public override void bark()
            {
                Console.WriteLine("狗,汪汪");
            }
       
        }


    1.抽象成员必须标记为abstract,并且不能有任何实现。
    2,抽象成员必须在抽象类中。
    3.抽象类不能被实例化(静态类也不能实例化)
    4.子类继承抽象类后,必须把父类中的所有抽象成员重写。(除非子类以为一个抽象类,则可以不重写)

    5.抽象成员的访问修饰符不能是private。
    因为抽象成员只能被子类对象访问,故抽象成员用private修饰则不能被访问

    6.在抽象类中可以包含实例成员,并且抽象类的实例成员可以不被子类实现。
    7.抽象类是有构造函数,虽然不能被实例化
    8.如果父类的抽象方法中有返回值,那么子类在重写这个抽象方法的时候,也必须要传入返回值。
    9.抽象类中可以定义虚方法,抽象类中的虚方法用来实现其他方面的多态。

    如果父类中的方法有默认的实现,并且父类需要被实例化,这时可以将父类定义成一个普通类,如果父类中的方法没有默认实现,父类也不需要被实例化,则可以将该类定义为抽象类、。

     

     

     

     

    2实例
     #region//经理11点打卡  员工9点打卡  程序员不打卡
                employee em = new employee();
                Manager ma = new Manager();
                cxyuan cx = new cxyuan();
                employee[] emplo = new employee[] {em , ma , cx };

                for (int i = 0; i < emplo.Length; i++)
                {
                    emplo[i].Daka();
                }
                #endregion

    public class employee
        {

            public virtual void Daka()
            {
                Console.WriteLine("员工9点打卡");
            }
        }


        public class Manager :employee
        {
            public override void Daka()
            {
                Console.WriteLine("经理11点打卡");
            }
       
        }

        public class cxyuan:employee
        {
            public override void Daka()
            {
                Console.WriteLine("程序员不打卡");
            }
       
        }

    转载于:https://www.cnblogs.com/jefy/p/9207477.html

    展开全文
  • Java多态实现机制

    2015-03-28 21:51:58
    Java多态实现机制
  • 多态实现

    2013-01-17 15:58:32
    多态Ploymorphism:理解多态原理,用抽象类和抽象方法,以及虚函数实现多态。 封装Encapsulation:保证对象自身数据的完整性、安全性。 v 在基类Person中声明抽象方法Login(),让它约束子类,必须实现不同的...
  • Go多态实现

    2020-04-29 00:14:02
    Go本身不具有多态的特性,不能够像Java、C++那样编写多态类、多态方法。但是,使用Go可以编写具有多态功能的类绑定的方法。Go使用struct构建类,根据不同类调用不同的方法, ...//实现多态 type Code string type P...
  • 虚拟机中多态实现方式 多态的表现形式分为重载和重写。 重载是指同一类中的同名方法不同参数列表的表现形式,是一种静态的多态。 重写是指具有继承关系的多个类中子类对父类方法的重写,是一种动态的多态。 ...
  • 多态指的就是在同一个方法中,...实现多态的条件: 要有继承 要有重写 父类引用指向子类对象 实例: public class Test { public static void main(String[] args) { //创建YellowPerson类的实例,是父类的变量引用
  • 多态定义、多态实现、多态分类。

    千次阅读 2018-08-23 11:46:47
    1.多态定义:同一操作作用于不同的...实现多态有三种方式:虚方法,抽象方法,接口。   虚方法:子类重写父类中的方法,对父类中的方法进行覆盖。适用情况:父类中的方法对子类来说不适用,子类通过重写该方法,覆...
  • 1.非多态方式实现计算器 这里计算器我们就简单描述成两个数的相加,相减和相乘。 #include <iostream> #include <string> using namespace std; class Calculator { public: int m_Num1; int m_...
  • JAVA多态实现方式

    千次阅读 2015-12-06 16:22:55
    多态实现的角度分为:静态多态和动态多态  静态多态也叫做编译时多态  动态多态也叫做运行时多态  1.静态的多态: 函数重载是静态的多态的一种实现形式: 举例说明: class MethodOverloading { viod receive...
  • 多态及其实现方式

    2017-06-28 17:08:51
    定义:多态就是指不同对象收到相同消息时,会产生不同行为,同一个类在不同的场合下表现出不同的行为特征 作用:把不同的子类对象都当作父类来看,可以屏蔽不同子类对象之间的差异,写出通用的代码,做出通用的编程...
  • 多态实现方式

    千次阅读 2013-11-23 14:25:00
    多态的形式有: 覆盖:输入参数一样,但对于不同的派生类有不同的实现, 其多态体现在运行阶段,也就是一个父类的指针可以指向不同的派生类对象,调用不同的同名函数。 重载:类的成员函数里,允许有多个不同参数的...
  • 探究C++多态实现原理

    2018-09-24 15:37:55
    探究C++多态实现原理 在之前的博客中讲到了如何使用C++多态的性质,实现面对对象的程序设计。 在这一篇文章中将会从多态的实现原理,_vfptr 以及多态类的内存构建模型上来探究C++多态的实现过程。 从以下代码来讨论...
  • Java和C++中多态实现方式

    千次阅读 2013-08-27 00:28:34
    简要描述C++与java多态实现机制
  • 多态的概念:让一个对象能够表现出多种的状态(类型)。  用一句话来描述多态:通过继承实现的不同对象调用相同的方法,表现出不同的行为,称之为多态。... 实现多态的3种方式: 虚方法、抽象类、接口。 1...
  • java多态实现原理

    万次阅读 多人点赞 2016-07-22 16:46:24
    众所周知,多态是面向对象编程语言的重要特性,它允许基类的指针或引用指向派生类的对象,而在具体访问时实现方法的动态绑定。C++ 和 Java 作为当前最为流行的两种面向对象编程语言,其内部对于...Java 的实现方式 J
  • 多态实现的两种方式

    2010-08-18 17:10:00
    看《C++ Template》一书中才发现使用模板也可以实现多态,所不同的是模板灵活性不如抽象类,但是是静态编译的,因此效率要高。 #include class Shape { public: virtual void draw() const = 0; }...
  • php接口的多态实现

    2019-04-22 16:07:09
    现实生活的例子: 让我们看现实中的一个例子。我们的电脑有USB接口,你可以选择在这个USB接口上插入一个鼠标,键盘,或者是手机,硬盘都可以,电脑就会进行不同...这对继承中抽象方法的实现就是类的多态的体现。 ...
  • 多态实现及虚函数

    2021-03-10 10:58:53
    2.动态多态:派生类与虚函数实现运行时多态 区别: 静态多态的函数地址早绑定-编译阶段确定函数地址 动态多态的函数地址晚绑定-运行阶段确定函数地址 class Animal{ public: void speak(){ cout<<"动物在...
  • c++多态实现的机制

    千次阅读 2019-06-21 15:10:03
    什么是c++的多态多态的意思是,当有基类和派生类的时候,在基类的函数前...c++多态实现实现依靠的是虚函数和动态绑定机制; 虚函数背后的原理 那么当我们将基类的一个函数声明为virtual时,在背后发生...
  • 多态实现方式

    千次阅读 2010-02-10 09:49:00
    多态实现方式; VB.NET多态性实现1. OverLoads:原有成员相同的名称来声明属性或方法,但参数列表与原始成员不同(C#方法重载)。2. Overrides:在派生类中重写基类成员(VB.NET中在基类中声明为Overridable的方法...
  • C++多态三种实现方式

    千次阅读 2020-10-14 19:52:01
    多态实现方式分为三块:重载、重写、重定义。下面我们来谈一谈他们各自的实现方式和实现原理。 重载 实现方式 重载是在同一作用域内(不管是模块内还是类内,只要是在同一作用域内),具有相同函数名,不同的形参...
  • 多态实现方式和应用

    千次阅读 2015-01-16 15:03:33
    学了多态和大家分享一下学习心得,希望各位朋友指正。
  • 【C++】C++多态实现

    2020-06-02 06:48:24
    C++ 多态 多态按字面的意思就是多种形态。当类之间存在层次结构,并且类之间是通过继承关联时,就会用到多态。 C++ 多态意味着调用成员函数时,会根据调用函数的对象的类型来执行不同的函数。 静态多态 这就是所谓的...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 162,619
精华内容 65,047
关键字:

多态的实现方式