精华内容
下载资源
问答
  • 多态性的表现形式
    千次阅读
    2020-09-29 11:07:08

    多态性是面向对象编程的又一个重要特征,它是指在父类中定义的属性和方法被子类继承之后,可以具有不同的数据类型或表现出不同的行为,这使得同一个属性或方法在父类及其各个子类中具有不同的含义。

    对面向对象来说,多态分为编译时多态和运行时多态。其中编译时多态是静态的,主要是指方法的重载,它是根据参数列表的不同来区分不同的方法。通过编译之后会变成两个不同的方法,在运行时谈不上多态。而运行时多态是动态的,它是通过动态绑定来实现的,也就是大家通常所说的多态性。

    Java 实现多态有 3 个必要条件:继承、重写和向上转型。只有满足这 3 个条件,开发人员才能够在同一个继承结构中使用统一的逻辑实现代码处理不同的对象,从而执行不同的行为。

    • 继承:在多态中必须存在有继承关系的子类和父类。
    • 重写:子类对父类中某些方法进行重新定义,在调用这些方法时就会调用子类的方法。
    • 向上转型:在多态中需要将子类的引用赋给父类对象,只有这样该引用才既能可以调用父类的方法,又能调用子类的方法。

    例 1
    下面通过一个例子来演示重写如何实现多态性。例子使用了类的继承和运行时多态机制,具体步骤如下。

    1)创建 Figure 类,在该类中首先定义存储二维对象的尺寸,然后定义有两个参数的构造方法,最后添加 area() 方法,该方法计算对象的面积。代码如下:

    public class Figure {
        double dim1;
        double dim2;
        Figure(double d1, double d2) {
            // 有参的构造方法
            this.dim1 = d1;
            this.dim2 = d2;
        }
        double area() {
            // 用于计算对象的面积
            System.out.println("父类中计算对象面积的方法,没有实际意义,需要在子类中重写。");
            return 0;
        }
    }
    

    2)创建继承自 Figure 类的 Rectangle 子类,该类调用父类的构造方法,并且重写父类中的 area() 方法。代码如下:

    public class Rectangle extends Figure {
        Rectangle(double d1, double d2) {
            super(d1, d2);
        }
        double area() {
            System.out.println("长方形的面积:");
            return super.dim1 * super.dim2;
        }
    }
    

    3)创建继承自 Figure 类的 Triangle 子类,该类与 Rectangle 相似。代码如下:

    public class Triangle extends Figure {
        Triangle(double d1, double d2) {
            super(d1, d2);
        }
        double area() {
            System.out.println("三角形的面积:");
            return super.dim1 * super.dim2 / 2;
        }
    }
    

    4)创建 Test 测试类,在该类的 main() 方法中首先声明 Figure 类的变量 figure,然后分别为 figure 变量指定不同的对象,并调用这些对象的 area() 方法。代码如下:

    public class Test {
        public static void main(String[] args) {
            Figure figure; // 声明Figure类的变量
            figure = new Rectangle(9, 9);
            System.out.println(figure.area());
            System.out.println("===============================");
            figure = new Triangle(6, 8);
            System.out.println(figure.area());
            System.out.println("===============================");
            figure = new Figure(10, 10);
            System.out.println(figure.area());
        }
    }
    

    从上述代码可以发现,无论 figure 变量的对象是 Rectangle 还是 Triangle,它们都是 Figure 类的子类,因此可以向上转型为该类,从而实现多态。

    5)执行上述代码,输出结果如下:

    长方形的面积:
    81.0
    ===============================
    三角形的面积:
    24.0
    ===============================
    父类中计算对象面积的方法,没有实际意义,需要在子类中重写。
    0.0
    
    更多相关内容
  • [Java教程]多态性表现形式

    千次阅读 2021-03-17 10:52:51
    [Java教程]多态性表现形式0 2015-09-05 19:00:161.什么是多态面向对象的多态性就是将父类对象应用到子类对象的特征。简单地讲,多态指的就是在应用程序中出现的“重名”现象。多态性允许以统一的风格编写程序,以...

    [Java教程]多态性的表现形式

    0 2015-09-05 19:00:16

    1.什么是多态

    面向对象的多态性就是将父类对象应用到子类对象的特征。简单地讲,多态指的就是在应用程序中出现的“重名”现象。多态性允许以统一的风格编写程序,以处理种类繁多的已存在的类和相关类。这样既降低了维护的难度,又节省了时间。

    2.在java语言中,多态性体现在哪些方面方法重载:    通常是指在同一个类中,相同的方法名对应着不同的方法实现,这些方法名相同的方法其区别在于他们需要的参数不同。即采用不同的方法形参表,区分重载方法要求形参在数据类型、个数和顺序的不同。(见实例2.1)

    方法重写:    方法重写主要用于父类和子类间。子类重写父类的方法,只是对应的方法实现不同,其方法名和参数都相同。(见实例2.2)

    抽象类:       在java语言中,一个类中的方法只给出了标准,而没有给出具体的实现方法,这样的类就是抽象类。例如父类就是抽象类,它不会被实例化的类。

    接口:          在多态机制中,接口比抽象类使用起来更加方便。而抽象类组成的集合就是接口。

    实例2.1    该类中声明了两个show方法,但是两个方法的形式参数是不同,所以说第二个show方法重载了第一个show方法1 /* 定义类TestPolymorphisml*/ 2 public class TestPolymorphisml { 3 4 String s="这是方法重载的实例"; 5 String ss="这是一个TestPolymorphisml类"; 6 public void show(){ 7 System.out.println("我是show方法"+ss); 8 } 9 public void show( String str){ //这个方法就是对上一个show方法的重载,方法名相同,只是他们需要的形参不一样10 System.out.println("我重载了show方法"+str);11 }12 public static void main(String[] args) {13 TestPolymorphisml test = new TestPolymorphisml();14 test.show(); //对象调用第一个show方法15 test.show(test.s); //调用重载的show方法16 }17 }

    运行结果:

    bc91bb04e6e9c61e24c974e4440db8f2.gif

    实例2.2 先新建一个A类,再建一个类继承A类,在子类中对父类的属性和方法进行重写1 /*定义A类*/2 public class A {3 String a="我是A类";4 public void showA(){5 System.out.println(a);6 }7 }

    1 /*定义类TestPolymorphism2 让它继承A类*/ 2 public class TestPolymorphism2 extends A{ 3 String b="我是重写方法"; //这是对父类的a属性的重写 4 public void showA(){ //这是对父类showA方法的重写 5 super.showA(); //使用关键字super调用父类的showA方法 6 System.out.println(b); 7 } 8 public static void main(String[] args) { 9 TestPolymorphism2 n = new TestPolymorphism2(); //创建对象n10 n.showA();11 }12 }

    运行结果:

    bc91bb04e6e9c61e24c974e4440db8f2.gif

    在实验中我们可以很清晰的看出多态性在java语言编程中占着多么重要的地位。

    本文网址:http://www.shaoqun.com/a/141616.html

    *特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们:admin@shaoqun.com。

    0

    展开全文
  • C#中多态性的实现

    2021-01-20 02:01:05
    多态是指一个行为具有多个不同表现形式的能力,在C#中通过多态性的检测时机可以分为静态多态性和动态多态性 静态多态性:函数重载和运算符重载 动态多态性:抽象方法、重写方法、隐藏方法 二:函数重载(overlode) ...
  • 多态就是多种形态,也就是对不同对象发送同一个消息,不同对象会做出不同的响应。这篇文章主要介绍了c#静态多态性与动态多态性的相关知识,需要的朋友可以参考下
  • 什么是多态性多态性是继数据抽象和继承后,面向对象语言的第三个特征。从字面上理解,多态的意思是“多种形态”,简单来说,多态是具有表现多种形态的能力的特征,在OO中是指“语言具有根据对象的类型以不同方式...
  • 主要介绍了Java多态性定义与用法,较为详细的分析了多态的概念、功能以及java定义与实现面向对象多态性的相关操作技巧,需要的朋友可以参考下
  • 主要介绍了Java面向对象程序设计多态性,结合实例形式分析了java多态性的概念、原理、定义与使用方法及相关注意事项,需要的朋友可以参考下
  • 多态是指同样的消息被不同的对象接收时导致不同的行为。本文通过实例代码给大家介绍了C++多态性与虚函数的相关知识,感兴趣的朋友一起看看吧
  • 展开全部在面向对象的程序JAVA中,多态性的定义是:同一操作作用于不同的32313133353236313431303231363533e78988e69d...多态性就是多种表现形式,即用"一个对外接口,多个内在实现方法"表示。多态性包...

    展开全部

    在面向对象的程序JAVA中,多态性的定义是:

    同一操作作用于不同的32313133353236313431303231363533e78988e69d8331333366306461类的实例,将产生不同的执行结果。

    对象根据所接受的消息而做出动作,同样的消息被不同的对象接受时可能导致完全不同的行为,这种现象称为多态性。

    多态性就是多种表现形式,即用"一个对外接口,多个内在实现方法"表示。

    多态性包含编译时的多态性、运行时的多态性两大类。 即:多态性也分静态多态性和动态多态性两种。

    静态多态性

    静态多态性是指定义在一个类或一个函数中的同名函数,它们根据参数表(类型以及个数)区别语义,并通过静态联编实现。

    动态多态性

    动态多态性是指定义在一个类层次的不同类中的重载函数,它们一般具有相同的函数,因此要根据指针指向的对象所在类来区别语义,它通过动态联编实现。

    在用户不作任何干预的环境下,类的成员函数的行为能根据调用它的对象类型自动作出适应性调整,而且调整是发生在程序运行时,这就是程序的动态多态性。举例子说明一下:

    402f5f0c23c99af1822e936a7bf64c5c.png

    扩展资料:

    1.多态存在的三个必要条件:

    (1)要有继承;

    (2)要有重写;

    (3)父类引用指向子类对象。

    2.多态的好处:

    (1)可替换性(substitutability):多态对已存在代码具有可替换性,例如,多态对圆Circle类工作,对其他任何圆形几何体,如圆环,也同样工作。

    (2)可扩充性(extensibility):多态对代码具有可扩充性,增加新的子类不影响已存在类的多态性、继承性,以及其他特性的运行和操作。实际上新加子类更容易获得多态功能。

    (3)接口性(interface-ability):多态是超类通过方法签名,向子类提供了一个共同接口,由子类来完善或者覆盖它而实现的。

    (4)灵活性(flexibility):它在应用中体现了灵活多样的操作,提高了使用效率。

    (5)简化性(simplicity):多态简化对应用软件的代码编写和修改过程,尤其在处理大量对象的运算和操作时,这个特点尤为突出和重要。

    参考资料来源:

    展开全文
  • 1多态性概述 多态性的含义 在C++中多态表现为同一形式的函数调用, 可能调用不同的函数实现 多态性表现形式 参数多态函数模板和类模板 包含多态继承了虚函数的派生类同名函数 重载多态函数重载和运算符重载 强制...
  • 类的多态与多态性

    千次阅读 2021-01-01 22:05:12
    什么是多态性 多态性指的是在不考虑对象的具体类型下, 直接使用对象的方法, 同一种调用方式, 运行的效果不一样 (这就需要在设计时, 把对象的调用方法设计成形式统一的一种) 面向对象方法中一般是这样表述多态性:向...

    一.多态

    1."甚么似"多态

    多态是指一类事物有多种形态

    2.例 : 动物的多种形态 : 人, 鸭子, 猪…

    class Animal:
        def speak(self):
            print(f"开口说话")
    
    #动物的形态之一:人
    class People(Animal):
        def speak(self):
            print('呵呵呵')
    
    #动物的形态之二:狗
    class Duck(Animal):
        def speak(self):
            print('嘎嘎嘎')
    
    #动物的形态之三:猪
    class Pig(Animal):
        def speak(self):
            print('咕咕咕')
    
    Peo1 = People()
    Duc1 = Duck()
    Pig1 = Pig()
    
    Peo1.speak()  # 呵呵呵
    Duc1.speak()  # 嘎嘎嘎
    Pig1.speak()  # 咕咕咕
    

    Peo1, Duc1, Pig1对象都属于一个类

    同一类的事物调用相同的方法, 但执行的效果却不一样, 这就是多态

    3.例 : 文件的多种形态 : 文本文件, 可执行文件

    class File:
        def click(self):
            pass
    
    # 文件的形态之一:文本文件
    class Text(File):
        def click(self):
            print('打开文件')
    
    # 文件的形态之二:可执行文件
    class ExeFile(File):
        def click(self):
            print('执行文件')
    
    T1 = Text()
    E1 = ExeFile()
    
    T1.click()  # 打开文件
    E1.click()  # 执行文件
    

    T1, E1属于同一个类, 但是他们调用同一个方法, 表现出来的效果却不一样


    二.多态性

    1.什么是多态性

    多态性指的是在不考虑对象的具体类型下, 直接使用对象的方法, 同一种调用方式, 运行的效果不一样 (这就需要在设计时, 把对象的调用方法设计成形式统一的一种)

    面向对象方法中一般是这样表述多态性:向不同的对象发送同一条消息,不同的对象在接收时会产生不同的行为(即方法)。也就是说,每个对象可以用自己的方式去响应共同的消息。所谓消息,就是调用函数,不同的行为就是指不同的实现,即执行不同的函数

    • 例 : 下课铃响了(同一种调用方式), 老师执行下班的操作, 学生执行放学的操作(执行后的不同效果)
    • 例 : 每月十五号(同一种调用方式), 老板执行发工资操作, 员工执行收工资操作(执行后的不同效果)
    • 例 : 白晚班交替(同一种调用方式), 白班执行下班的操作, 晚班执行上班的操作(执行后的不同效果)

    2.多态性的使用

    class Animal:
        def speak(self):
            print(f"开口说话")
    
    # 动物的形态之一:人
    class People(Animal):
        def speak(self):
            print('呵呵呵')
    
    # 动物的形态之二:狗
    class Duck(Animal):
        def speak(self):
            print('嘎嘎嘎')
    
    # 动物的形态之三:猪
    class Pig(Animal):
        def speak(self):
            print('咕咕咕')
    
    Peo1 = People()
    Duc1 = Duck()
    Pig1 = Pig()
    
    =============================================
    
    🍔我们不去考虑 "Peo1, Duc1, Pig1" 这三个对象是什么类型, 他们都有"speak"方法
    
    #定义一个统一的接口来使用
    def Animal_speak(obj):
        obj.speak()
     
    Animal_speak(Peo1)  # 呵呵呵
    Animal_speak(Duc1)  # 嘎嘎嘎
    Animal_speak(Pig1)  # 咕咕咕
    

    3.多态性的好处

    • 增加了程序的灵活性 : 对于使用者来说都是使用同一种方式去调用每个对象的方法
    • 增加了程序的可扩展性 : 如果我们新建一个类或者又实例出一个对象, 使用者无需更改自己的代码, 还是原来的调用方式
    • 新增实例 :
    🍔新增一个"狗"class Dog(Animal):
        def speak(self):
            print("汪汪汪")
            
    Dog1 = Dog()
    
    🍔对于使用者来说代码不需要改变
    def Animal_speak(obj):
        obj.speak()
    
    🍔还是使用相同的调用方式
    Animal_speak(Dog1)  # 汪汪汪
    
    # 这样我们就新增了一个"Dog"形态, 产生了一个"Dog1"实例, 使用者可以在完全不需要修改自己代码的情况下,使用之前一样的调用方式来调用"Dog1"的"speak"方法
    

    三.abs 模块限制子类必须重写父类的某些方法

    多态的前提是 : 同一类事物, 最好的方法就是让他们继承同一个基类

    为了保证多态, 我们可以使用 abc 模块来强制的要求子类必须重写父类的某些功能, 如果不重写, 则会报错

    import abc
    
    class Animal(metaclass=abc.ABCMeta):
        @abc.abstractmethod     # @abc.abstractmethod装饰器后严格控制子类必须实现这个方法, 才能正常的实例化
        def speak(self):
            print(f"开口说话")
    
    class People(Animal):       # 子类继承了"Animal"类就必须重写指定的"speak"
        def speak(self):
            print('呵呵呵')
    
    class Duck(Animal):
        pass
        # def speak(self):      # "Duck"没有重写
        #     print('嘎嘎嘎')
        
    Peo1 = People()
    Duc1 = Duck()               # 实例对象时就报错 "TypeError"
    

    abs 模块使用小结

    • abs 模块不是我们来保证多态的惯用做法, Python中有其他方法可以实现
    • Python中不推荐强制使用父类来约束子类, Python推崇使用鸭子类型来实现多态
    展开全文
  • 虚函数和多态性

    2022-03-21 09:59:19
    1.多态性表现形式之一就是,具有不同功能的函数用同一个函数名,这样可以实现一个函数名调用内容不同的函数。 2.多态分为两类:动态多态 静态多态。 函数重载,运算符重载就属于静态的,静态多态性又称在编译时...
  • 多态性是指统一的接口,不同的表现形式。在我们下面的例子中,有5个类。 Game类是Football、Basketball、Popolong的父类,Games类使用前面4个类。 Java根据动态绑定决定执行“更具体”的方法,即子类方法。 ...
  • 多态性的科学解释:允许你将父对象设置成为一个或更多的他子对象的技术,赋值之后,父对象就可以根据当前赋值给它的子对象的特性以不同的方式运作。 通俗的解释,就是一句话:可以把一个子类的对象转换为父类的对象...
  • 多态性和虚函数

    千次阅读 2018-07-01 11:16:53
    具体的说,它主要表现在函数调用时,实现一种接口,多种方法,多态性是面向对象程序设计的另一个重要特征。C++支持两种多态性,编译时多态性和运行时的多态性。 编译时的多态性指的是属于某个类的不同对象,或不同...
  • Java多态性(向上转型、向下转型)

    千次阅读 多人点赞 2018-11-05 17:26:44
    文章目录多态1.1 方法的多态性1.2 对象的多态性(抽象类和接口)1.2.1 对象的向上转型1.2.2 对象的向下转型1.2.3 一个向上转型的实例1.3 多态性的总结 多态 在Java中,对于多态的核心表现主要有一下两点: 1.1 方法...
  • 多态性(一)——静态多态性

    千次阅读 2015-03-04 12:18:55
    在C++中,多态性表现形式之一是:具有不同功能的函数可以用同一个函数名,这样就可以实现用一个函数名调用不同内容的函数。  从系统实现的角度来看,多态性分两类:静态多态性和动态多态性。 静态多态性是通过函数...
  • 多态根据上下文,对象可以采用多种形式。程序将确定该对象每次执行所需的含义或用法,从而减少了重复代码。 我国有句俗语:“龙生九子,各有不同”。这就是多态。多态是同一类事物具有的多种形态。多态是面向对象...
  • C++多态性原理详解(静态多态、动态多态、虚函数、虚函数表) 先给出定义:多态是同一个行为具有多个不同表现形式或形态的能力。 1 联编 联编也称绑定,是指在一个源程序经过编译链接成为可执行文件的过程中,将可执行...
  • 多态的表现形式

    千次阅读 2021-03-17 14:05:41
    多态有四种体现形式: 1. 接口和接口的继承。 2. 类和类的继承。 3. 重载。 4. 重写。 其中重载和重写为核心。 重载:重载发生在同一个类中,在该类中如果存在个同名方法,但是方法的参数类型和个数不一样,...
  • C#中的多态性

    千次阅读 2020-01-30 19:24:10
    多态是指一个行为具有多个不同表现形式的能力,在C#中通过多态性的检测时机可以分为静态多态性和动态多态性静态多态性:函数重载和运算符重载 动态多态性:抽象方法、重写方法、隐藏方法 二:函数重载(overlode) ...
  • java多态的三种表现形式

    千次阅读 2021-06-19 12:17:53
    然后讲解常用的查询方式、自定义查询方式、原生SQL (Structured Query Language,结构化查询语言)的开发和映射,还会深入地讲解一对一、-对的关系映射操作以及事务的使用;最后对比分析JPA和MyBatis的区别。...
  • 接下来我想介绍类的一些特性,其中包括类的继承性、封装性以及多态性   一、类的继承性 1、新类从已有的类获得已有特性,称为类的继承; (1)通过继承,新建的子类从已有的类里获得父类的特性(被继承的类称为...
  • 虚函数与多态性

    千次阅读 2019-06-27 21:29:17
    重载函数是多态性的一种简单体现形式 虚函数允许函数调用与函数体的联系在运行时才进行,称为动态联编. 静态联编: 1. 联编是指一个程序模块、代码之间互相关联的过程。 2. 静态联编,是程序匹配、连接在编译...
  • java多态性

    千次阅读 2016-12-03 19:01:01
    多态的两种表现形式:方法重载overloading(静态多态性) 方法覆盖overriding (动态多态性) 方法的重载在Java中每个方法都有签名,就是方法名以及参数的个数和类型。如果两个方法参数的个数或类型不同,它们可以...
  • 一、填空题(1)C++的两...(3)重载函数在编译时表现多态性,就是 ( 静态 )联编;而虚函数则在运行时表现多态性是 ( 动态 ) 联编。(4)为了区分重载函数,把一个派生类中重定义基类的虚函数称为 ( 覆...
  • 多态性

    2013-05-23 16:32:05
    多态性”一词最早用于生物学,指同一种族的生物体具有相同的特性。在面向对象的程序设计理论中,多态性的定义是:同一操作作用于不同的类的实例,将产生不同的执行结果,即不同类的对象收到相同的消息时,得到不同...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 41,062
精华内容 16,424
关键字:

多态性的表现形式