精华内容
下载资源
问答
  • 2022-01-23 14:26:48

    多态的基础语法
        
        1、向上转型和向下转型的概念。

            向上转型:子--->父 (upcasting)
                又被称为自动类型转换:Animal a = new Cat();

            向下转型:父--->子 (downcasting)
                又被称为强制类型转换:Cat c = (Cat)a; 需要添加强制类型转换符。
                什么时候需要向下转型?
                    需要调用或者执行子类对象中特有的方法。
                    必须进行向下转型,才可以调用。
                向下转型有风险吗?
                    容易出现ClassCastException(类型转换异常)
                怎么避免这个风险?
                    instanceof运算符,可以在程序运行阶段动态的判断某个引用指向的对象
                    是否为某一种类型。
                    养成好习惯,向下转型之前一定要使用instanceof运算符进行判断。
            
            不管是向上转型还是向下转型,首先他们之间必须有继承关系,这样编译器就不会报错。

        2、什么是多态。
            多种形态,多种状态,编译和运行有两个不同的状态。
            编译期叫做静态绑定。
            运行期叫做动态绑定。
            Animal a = new Cat();
            // 编译的时候编译器发现a的类型是Animal,所以编译器会去Animal类中找move()方法
            // 找到了,绑定,编译通过。但是运行的时候和底层堆内存当中的实际对象有关
            // 真正执行的时候会自动调用“堆内存中真实对象”的相关方法。
            a.move();

            多态的典型代码:父类型的引用指向子类型的对象。(java中允许这样写代码!!!)

        3、什么时候必须进行向下转型?
            调用子类对象上特有的方法时。

    更多相关内容
  • 但是这个多态什么作用呢?而我们又为什么要是有多态呢?首先讲下封装和继承:封装是把过程和数据包围起来,对数据的访问只能通过已定义的界面,他把实现的细节影藏起来了,比如你在java中去实现...

    用最简单的一句话就是:父类型的引用指向子类型的对象。用一句比较通俗的话:同一操作作用于不同的对象,可以产生不同的效果。这就是多态。

    这句话很好理解:Person person = new Student("张三");但是这个多态有什么作用呢?而我们又为什么要是有多态呢?

    首先讲下封装和继承:封装是把过程和数据包围起来,对数据的访问只能通过已定义的界面,他把实现的细节影藏起来了,比如你在java中去实现一个类,这个类中提供了一些功能方法,你只需要知道你需要传递什么样的参数,会达到什么样的效果,实现细节在类中定义好了。从而使得代码模块化;而继承可以扩展已存在的代码模块,而目的就是为了代码重用。

    那么多态除了代码的复用,还可以解耦。然而为什么要解耦?耦合度讲的是模块模块之间,代码代码之间的关联度,通过对系统的分析把他分解成一个一个子模块,子模块提供稳定的接口,达到降低系统耦合度的的目的,模块模块之间尽量使用模块接口访问,而不是随意引用其他模块的成员变量。

    多态有什么好处?

    有两个好处:

    1. 应用程序不必为每一个派生类编写功能调用,只需要对抽象基类进行处理即可。大大提高程序的可复用性。//继承

    2. 派生类的功能可以被基类的方法或引用变量所调用,这叫向后兼容,可以提高可扩充性和可维护性。 //多态的真正作用,

    多态在什么地方用?

    可以用在方法的参数中和方法的返回类型中。

    在方法中的参数,请看下面的例子:

    public abstract class Driver

    {

    public void run();//让子类来运行

    }

    class SBenz : Driver

    {

    public void run()

    {

    Console.WriteLine("Benz在以200迈的速度在run");

    }

    }

    class JD : Driver

    {

    public void run()

    {

    Console.WriteLine("JD is running...");

    }

    }

    class Person

    {

    private Driver driver;

    public Person()

    {

    }

    public Person(Driver driver)

    {

    this.driver = driver;

    }

    public void drive()

    {

    driver.run();

    }

    public void setDriver(Driver driver)

    {//运用参数多态,以后不管买什么车都可以

    this.driver = driver;

    }

    }

    static void Main(string[] args)

    {

    Person p = new Person();

    JD jd = new JD();//刚开始没钱就买辆JD吧

    p.setDriver(jd);

    p.drive();

    SBenz benz = new SBenz();//有钱换车了

    p.setDriver(benz);

    p.drive();

    }

    在方法的返回类型中,请看下面的例子:

    上面的例子中,不管是JD还是Benz都是我们自己直接new出来的.我们可以设计一个工厂类,专门生成汽车

    /**

    *   我们将多态使用在方法的返回类型中

    *   Driver可以是抽象类,也可以是接口,JD和Benz分别继承该类或实现该借口

    */

    public class CarFactory

    {

    public Driver factory(String carName)

    {

    if (carName.Equals("JD"))

    {

    return new JD();

    }

    else if (carName.Equals("Benz"))

    {

    return new SBenz();

    }

    else

    {

    Console.WriteLine("对比起,不伺候");

    return null;

    }

    }

    }

    类型的参数.,传入参数的时候,可以传入任何一个类的对象,只要是对应的类的对象名称就可以了

    这就是多态的应用!

    展开全文
  • Python中的多态什么

    2021-02-03 13:00:33
    多态的概念其实不难理解,它是指对不同类型的变量进行相同的操作,它会根据对象(或类)类型的不同而表现出不同的行为。事实上,我们经常用到多态的性质,比如:>>>1 23>>>'a' 'b''ab'可以看到,...

    多态的概念其实不难理解,它是指对不同类型的变量进行相同的操作,它会根据对象(或类)类型的不同而表现出不同的行为。

    abbde61c8b675a2a208384ead5539ad1.png

    事实上,我们经常用到多态的性质,比如:>>> 1   2

    3

    >>> 'a'   'b'

    'ab'

    可以看到,我们对两个整数进行   操作,会返回它们的和,对两个字符进行相同的   操作,会返回拼接后的字符串。也就是说,不同类型的对象对同一消息会作出不同的响应。

    相关推荐:《Python视频教程》

    再看看类的例子:class Animal(object):

    def __init__(self, name):

    self.name = name

    def greet(self):

    print 'Hello, I am %s.' % self.name

    class Dog(Animal):

    def greet(self):

    print 'WangWang.., I am %s.' % self.name

    class Cat(Animal):

    def greet(self):

    print 'MiaoMiao.., I am %s' % self.name

    def hello(animal):

    animal.greet()

    看看多态的使用:>>> dog = Dog('dog')

    >>> hello(dog)

    WangWang.., I am dog.

    >>>>>> cat = Cat('cat')

    >>> hello(cat)

    MiaoMiao.., I am cat

    可以看到,cat 和 dog 是两个不同的对象,对它们调用 greet 方法,它们会自动调用实际类型的 greet 方法,作出不同的响应。这就是多态的魅力。

    相关推荐:

    Python中类的继承是什么

    您可能感兴趣的文章:

    展开全文
  • 什么是多态,Python多态及用法详解 在面向对象程序设计中,除了封装和继承特性外,多态也是一个非常重要的特性,本节就带领大家详细了解什么是多态。 我们都知道,Python 是弱类型语言,其最明显的特征是在使用变量...

    什么是多态,Python多态及用法详解

    在面向对象程序设计中,除了封装和继承特性外,多态也是一个非常重要的特性,本节就带领大家详细了解什么是多态。

    我们都知道,Python 是弱类型语言,其最明显的特征是在使用变量时,无需为其指定具体的数据类型。这会导致一种情况,即同一变量可能会被先后赋值不同的类对象,例如:

    class CLanguage:
        def say(self):
            print("赋值的是 CLanguage 类的实例对象")
    class CPython:
        def say(self):
            print("赋值的是 CPython 类的实例对象")
    a = CLanguage()
    a.say()
    a = CPython()
    a.say()
    

    运行结果为:

    赋值的是 CLanguage 类的实例对象
    赋值的是 CPython 类的实例对象
    

    可以看到,a 可以被先后赋值为 CLanguage 类和 CPython 类的对象,但这并不是多态。类的多态特性,还要满足以下 2 个前提条件:

    继承:多态一定是发生在子类和父类之间;

    重写:子类重写了父类的方法。

    下面程序是对上面代码的改写:

    class CLanguage:
        def say(self):
            print("调用的是 Clanguage 类的say方法")
    class CPython(CLanguage):
        def say(self):
            print("调用的是 CPython 类的say方法")
    class CLinux(CLanguage):
        def say(self):
            print("调用的是 CLinux 类的say方法")
    a = CLanguage()
    a.say()
    a = CPython()
    a.say()
    a = CLinux()
    a.say()
    

    程序执行结果为:

    调用的是 Clanguage 类的say方法
    调用的是 CPython 类的say方法
    调用的是 CLinux 类的say方法
    

    可以看到,CPython 和 CLinux 都继承自 CLanguage 类,且各自都重写了父类的 say() 方法。从运行结果可以看出,同一变量 a 在执行同一个 say() 方法时,由于 a 实际表示不同的类实例对象,因此 a.say() 调用的并不是同一个类中的 say() 方法,这就是多态。

    但是,仅仅学到这里,读者还无法领略 Python 类使用多态特性的精髓。其实,Python 在多态的基础上,衍生出了一种更灵活的编程机制。

    继续对上面的程序进行改写:

    class WhoSay:
        def say(self,who):
            who.say()
    class CLanguage:
        def say(self):
            print("调用的是 Clanguage 类的say方法")
    class CPython(CLanguage):
        def say(self):
            print("调用的是 CPython 类的say方法")
    class CLinux(CLanguage):
        def say(self):
            print("调用的是 CLinux 类的say方法")
    a = WhoSay()
    #调用 CLanguage 类的 say() 方法
    a.say(CLanguage())
    #调用 CPython 类的 say() 方法
    a.say(CPython())
    #调用 CLinux 类的 say() 方法
    a.say(CLinux())
    

    程序执行结果为:

    调用的是 Clanguage 类的say方法
    调用的是 CPython 类的say方法
    调用的是 CLinux 类的say方法
    

    此程序中,通过给 WhoSay 类中的 say() 函数添加一个 who 参数,其内部利用传入的 who 调用 say() 方法。这意味着,当调用 WhoSay 类中的 say() 方法时,我们传给 who 参数的是哪个类的实例对象,它就会调用那个类中的 say() 方法。

    在其它教程中,Python 这种由多态衍生出的更灵活的编程机制,又称为“鸭子模型”或“鸭子类型”。

    展开全文
  • 什么是多态多态有什么用途? 什么是多态多态有什么用途? 什么是多态多态有什么用途? 什么是多态多态有什么用途?
  • 看了这个,我终于知道了为什么要用多态了 看了大量的资料和视频之后,我终于搞清了多态作用了,废话不多说,直接上干货! 多态的好处: 1.提高了代码的可维护性 2.提高了代码的扩展性 多态作用: 可以...
  • 什么是编译时 只是单纯的将代码翻译成一种中间语言(例如...什么是Java编译时多态 通过编译即可明确是哪一个多态方法的调用 比如说Java的重载,只通过参数的数量和类型不同来实现多态,那么在编译时我们可以单纯根据
  • 什么是多态?为什么用多态?有什么好处?

    万次阅读 多人点赞 2018-07-13 16:48:56
    多态可以分为变量的多态,方法的多态,类的多态.我这里强调的是类的多态,这是我们在以后的工作中经常回用到的首先,有这样一个系统:有个学生工作从达内毕业了,作的还不错.买了辆捷达汽车.这个系统应该如何设计呢?按照OO...
  • 什么是多态? 概念:同一操作作用于不同的对象,可以有不同的解释,产生不同的执行结果,这就是多态性。简单的说:就是用基类的引用指向子类的对象。 为什么要用多态呢? 原因:我们知道,封装可以隐藏实现细节...
  • 什么是多态多态有什么好处?

    千次阅读 2020-07-11 10:56:22
    什么是多态? 同一操作作用于不同的对象,可以有不同的解释,产生不同的执行结果,这就是多态性。简单的说:就是用基类的引用指向子类的对象。 为什么用多态? "封装"通过合并特征和行为来创建新的数据类型。“实现...
  • java 多态什么

    千次阅读 2020-12-22 17:10:27
    多态是同一个行为具有多个不同表现形式或形态的能力。 多态的优点 消除类型之间的耦合关系:在使用重载方式,来对同方法名不同参数类型,来达到不同结果,进而消除了一定耦合关系 可替换性:在使用重写方式,完全...
  • 什么是多态

    千次阅读 2019-08-20 20:45:31
    什么是多态 多态的特点 多态存在的三个必要条件 多态时成员变量、静态方法和非静态方法的特点 什么是多态 多态就是一个对象变量可以指向多种实际类型的现象,同一个事件发生在不同的对象上会产生不同的结果。 ...
  • python类的多态什么

    2020-12-09 04:28:24
    多态首先是建立在继承的基础上的,先有继承才能有多态多态是指不同的子类在继承父类后分别都重写覆盖了父类的方法,即父类同一个方法,在继承的子类中表现出不同的形式。多态成立的另一个条件是在创建子类时候必须...
  • 多态通过分离做什么和怎么做,从另一个角度将接口和实现分离开来。多态不但能够改善代码的组织结构和可读性,还能创建可扩展的程序,无论在项目最初还是添加新功能的时候都是可“生长”的程序。简单的来说多态就是将...
  • 1.多态的含义 什么是多态,就是一个事物有多种形态,比如说是老师是老师,他也是人,也是丈夫或者妻子,或者光棍儿,这就阐述了多种形态。
  • 作者:crane_practicewww.cnblogs.com/crane-practice/p/3671074.html2019-06-13 08:46:00Java多态的实现机制是父类或接口定义的引用变量可以指向子类或实现类的实例对象,而程序调用的方法在运行期才...浅谈多态机...
  • 多态什么

    2021-01-17 12:23:54
    多态(Polymorphism)按字面的意思就是“多bai种状态”。在面向对象语言中,接口的多种不同的实现方式即为多态。引用Charlie Calverts对多态的描述——多态性是允许你将父对象设置成为和一个或更多的他的子对象相等...
  • python中的多态什么_Python中的多态

    千次阅读 2020-07-29 13:36:05
    python中的多态什么 Python中的多态 (Polymorphism in Python) Polymorphism is a concept of Object Oriented Programming, which means multiple forms or more than one form. Polymorphism enables using a ...
  • C++ 什么是多态多态的用途

    千次阅读 2018-02-17 23:29:52
     *多态与非多态的实质区别就是函数地址是早绑定还是晚绑定。  *如果函数的调用,在编译器编译期间就可以确定函数的调用地址,并生产代码,是静态的,就是说地址是早绑定的。  *而如果函数调用的地址不能在...
  • 什么是多态多态作用? 虚函数的作用? 实现多态。(预留:虚函数的实现原理) 多态是什么? “一个接口,多种表现/实现”,多态性是提供一种技术,这种技术允许将父类指针或引用赋值为子类的指针或引用,进行...
  • 面向对象编程有三大特性:封装、继承、多态。封装隐藏了类的内部实现机制,可以在不影响使用的...那么什么是多态呢?多态的实现机制又是什么?请看我一一为你揭开:所谓多态就是指程序中定义的引用变量所指向的具...
  • 展开全部什么是多态1.面向对象的三大特性:封装、继承32313133353236313431303231363533e78988e69d8331333365653137、多态。从一定角度来看,封装和继承几乎都是为多态而准备的。这是我们最后一个概念,也是最重要的...
  • JAVA 什么是多态?

    万次阅读 多人点赞 2019-05-16 17:53:28
    面向对象编程有三大特性:封装、继承、多态。 封装隐藏了类的内部实现机制,可以在不影响使用的情况下...那么,什么是多态呢? 1.定义: 多态:指允许不同类的对象对同一消息做出响应。即同一消息可以根据发送对象...
  • 多态作用

    千次阅读 2019-04-30 09:07:54
    什么是多态? 概念:同一操作作用于不同的对象,可以有不同的解释,产生不同的执行结果,这就是多态性。简单的说:就是用基类的引用指向子类的对象。 为什么要用多态呢? 原因:我们知道,封装可以隐藏实现细节...
  • 什么是多态?

    千次阅读 2018-05-30 16:57:50
    核心:1、多态就是指程序中定义的引用变量所指向的具体类型和通过该引用变量发出的方法调用在编译时并不确定,而是在程序运行期间才确定,即一个引用变量倒底会指向哪个类的实例对象,该引用变量发出的方法调用到底...
  • java中关于多态的定义并没有一个准确的说法,这也是由于它本身的内容就很复杂。java中这种复杂的机制还有很多,往往需要我们花费大量的时间去研究。接下来主要来说一下它的用途,一起来看看吧。首先,我们需要知道的...
  • C++多态的好处和作用(用实例说话) 在面向对象的程序设计中,使用多态能够增强程序的可扩充性,即程序需要修改或增加功能时,只需改动或增加较少的代码。此外,使用多态也能起到精简代码的作用。本节通过两个实例来...
  • 一个例子 把不同的bai子类对象都当作父类来看,可以屏蔽不同子类对象之间的差异,写出通用的代码,做出通用的编程,以适应需求的不断变化。 赋值之后,父对象就可以根据当前赋值给它的子对象的特性以不同的方式运作...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 150,453
精华内容 60,181
关键字:

多态的作用是什么