精华内容
下载资源
问答
  • 动态多态性只针对
    千次阅读
    2018-05-19 21:48:41

    多态性严格来讲有两种描述形式:  

      方法的多态性:

    1.方法的重载:同一个方法名称会根据传入参数的类型及个数不同会执行不同的方法体

    2.方法的覆盖(重写):同一个方法会根据子类的不同,实现不同的功能

      对象的多态性:指的是发生在继承关系类之中,子类和父类之间的转换问题

    1.向上转型(自动完成):父类 父类对象 = 子类实例;

    2.向下转型(强制转换):子类 子类对象 =(子类) 父类实例;     eg:long型数据与int型数据的相互转换

    范例:向上转型

    class A{
    	public void print() {
    			System.out.println("A.public static void main()");
    	}
    }
    class B extends A{
    	  public void print() {
    		  	System.out.println("B.public static void main()");
    	  }
    }
    public class TestDemo {
           public static void main(String[] args) {
        	   A  a=new B();        //向上转型
        	   a.print();
    	
    } 
           }  

    范例:向下转型

    class A{
    	public void print() {
    			System.out.println("A.public static void main()");
    	}
    }
    class B extends A{
    	  public void print() {
    		  	System.out.println("B.public static void main()");
    	  }
    }
    public class TestDemo {
           public static void main(String[] args) {
        	   A  a=new B();
        	   B  b=(B) a;  //向下转型
    	      b.print();
    } 
           }  

    向上转型:由于所有的子类对象实例都可以自动的向上转型,所以在于参数的统一上。参数统一之后,还可以调用子类覆盖后的方法体,即:同一个方法针对于不同的子类可以有不同的实现。

    向下转型:指的是父类要调用子类自己特殊的方法。所有的父类发生了向上转型后只能看见父类自己定义的全部方法信息,但看不见子类特殊的方法,于是此时就要使用向下转型了。将父类对象转换为子类对象。这样就可以使用子类的特殊功能了。

    对于对象的转型,给出以下的总结:

    1.   80%的情况下都只会使用向上转型,因为可以得到参数类型的统一,方便于我们的程序设计;

         子类定义的方法大部分情况下请以父类的方法名称为标准进行复写。不要过多的扩充方法。

    2.   5%的情况下,会使用向下转型,目的是调用子类的特殊方法;

    3.   15%的情况下是不转型的,例如:String.

    个性化的操作在一个标准的开发之中应该尽量少出现,因为对象的转型操作里面毕竟有强制转换的问题,容易带来安全隐患。

    向下转型建立在向上转型的基础上!


    更多相关内容
  • C++ 多态性 (polymorphism)

    千次阅读 2021-05-14 15:40:23
    C++ 多态性 (polymorphism). 多态性是什么以及如何帮我们实现一个易于扩展的程序.

    概述

    多态性 (polymorphism) 是面向对象程序设计的一个重要特征. 利用多态性扩展设计和实现一个易于扩展的系统.
    在这里插入图片描述

    C++ 中多态性:

    • 同一函数名可以实现不同的功能
    • 用一个函数名调用不同内容的函数完成不同的工作

    静态多态

    静态多态 (static polymorphism) 是通过函数的重载实现的, 包括函数的重载和运算符重载. 在程序编译时系统就能觉得调用哪个函数.

    函数重载

    int main() {
        cout << max(1,2) << endl;
        cout << max(1.2, 2.3) << endl;
    
        return 0;
    }
    
    int max(int a, int b) {
        return (a > b) ? a:b;
    }
    
    double max(double a, double b){
        return (a > b) ? a:b;
    }
    

    输出结果:

    2
    2.3
    

    运算符重载

    int main() {
        Complex c1(2, 4), c2(6, 10);
        c1 = c1 + c2;
        c1.display();
    
        return 0;
    }
    
    Complex Complex::operator+(Complex &c) {
        return Complex(real + c.real, imag + c.imag);
    }
    

    输出结果:

    (8, 14i)
    

    动态多态

    动态多态 (dynamic polymorphism) 是在程序运行中才动态地确定操作所针对的对象.

    非动态

    Person 类:

    #ifndef PROJECT6_PERSON_H
    #define PROJECT6_PERSON_H
    
    #include <iostream>
    #include <string>
    using namespace std;
    
    class Person {
    private:
        string name;  // 姓名
        char gender;  // 性别
    public:
        Person(string n, char g) : name(n), gender(g) {}
        void display() {
            cout << "name: " << name << endl;
            cout << "gender: " << gender << endl;
        }
    };
    
    #endif //PROJECT6_PERSON_H
    

    Teacher 类:

    #ifndef PROJECT6_TEACHER_H
    #define PROJECT6_TEACHER_H
    
    #include <iostream>
    #include <string>
    #include "Person.h"
    using namespace std;
    
    class Teacher : public Person {
    private:
        string title;  // 头衔
    public:
        Teacher(string n, char g, string t) : Person(n, g), title(t) {}
        void display() {
            Person::display();
            cout << "title: " << title << endl;
        }
    };
    
    #endif //PROJECT6_TEACHER_H
    

    main:

    #include <iostream>
    #include "Person.h"
    #include "Teacher.h"
    
    int main() {
        // 创建对象
        Person p1("王叔叔", 'm'), *pt;  // 指针类型为
        Teacher t1("王老师", 'f', "教导主任");
    
        pt = &p1;
        pt->display();
        pt = &t1;
        pt->display();
    
        return 0;
    }
    

    输出结果:

    name: 王叔叔
    gender: m
    name: 王老师
    gender: f
    

    我们可以发现 Teacher 对象的头衔并没有输出, 因为 pt 指针的类型是 Person, 调用的是 Person 的display()函数.

    动态

    我们把show()函数声明为虚函数.

    Person 类:

    #ifndef PROJECT6_PERSON_H
    #define PROJECT6_PERSON_H
    
    #include <iostream>
    #include <string>
    using namespace std;
    
    class Person {
    private:
        string name;  // 姓名
        char gender;  // 性别
    public:
        Person(string n, char g) : name(n), gender(g) {}
        virtual void display() {
            cout << "name: " << name << endl;
            cout << "gender: " << gender << endl;
        }
    };
    
    #endif //PROJECT6_PERSON_H
    

    main:

    #include <iostream>
    #include "Person.h"
    #include "Teacher.h"
    
    int main() {
        // 创建对象
        Person p1("王叔叔", 'm'), *pt;  // 指针类型为
        Teacher t1("王老师", 'f', "教导主任");
    
        pt = &p1;
        pt->display();
        pt = &t1;
        pt->display();
    
        return 0;
    }
    

    输出结果:

    name: 王叔叔
    gender: m
    name: 王老师
    gender: f
    title: 教导主任
    
    展开全文
  • C++多态性的理解

    千次阅读 2017-04-15 20:30:05
    (1)抽象类是一种特殊的类,它为一族类提供统一的操作界面,通过它为一个类族建立一个公共的接口,使类能够更加有效的发挥多态性。 (2)建立抽象类,就是为了通过它多态地使用其中的成员函数。 (3)抽象类...

    根据清华大学郑莉老师的书《C++语言程序设计》来总结
    1 多态:是指类中具有相似功能的不同函数,使用同一个名称来实现;是对类的行为再抽象;多态是通过重载函数和虚函数来实现的。
    2 继承讨论的是类与类的层次关系,多态则是考虑在不同层次的类中,以及在同一个类的内部,同名成员函数之间的关系问题,是解决功能和行为的再抽象问题。
    3 多态是指类族中具有相似功能的不同函数使用同一个名称来实现,从而可以使用相同的调用方式来调用这些具有不同功能的同名函数。
    类型:
    面向对象的多态性可以分为4类:
    专用多态:
    (1)重载多态:普通函数以及成员函数的重载。
    (2)强制多态:将一个变量的类型加以变化。
    通用多态:
    (3)包含多态:研究类族中定义于不同类中的同名成员函数的多态行为,主要通过虚函数来实现。
    (4)参数多态:与类模板相关联。
    实现:
    多态从实现的角度可以分为:
    (1)编译时的多态:静态联编(重载、强制、参数),程序编译连接阶段完成。
    (2)运行时的多态:动态联编(包含),程序运行阶段完成。
    联编:是指计算机程序自身彼此关联的过程,就是把一条消息和一个对象的方法相结合的过程。
    运算符重载:
    运算符重载的实质是函数重载,在实现过程中,首先把指定的运算表达式转化为对运算符函数的调用,运算对象转化为运算符函数的形参,然后根据实参的类型来确定需要调用的函数,这个过程是在编译过程中实现的。不能重载的运算符有5个:“.”,“*”,“::”,“? :”“sizeof”。
    虚函数:
    虚函数是动态联编的基础,虚函数是非静态成员函数,虚函数经过派生之后,在类族中可以实现运行过程中的多态。
    根据赋值兼容规则,可以使用派生类对象代替基类对象。如果用基类类型的指针指向派生类对象,就可以通过这个指针来访问该对象。问题是派生到的只是从基类继承来的同名成员。
    解决这一问题的办法就是:如果需要通过基类的指针指向派生类的对象,并访问某个与基类同名的成员(如果是函数,则原型完全相同)。那么,首先在基类中将这个同名函数说明为虚函数。
    这样,通过基类类型指针,就可以使属于不同派生类的不同对象产生不同的行为,从而实现运行过程中的多态。
    一般虚成员函数实现的3个条件:
    (1)首先类之间应满足赋值兼容规则。
    (2)声明虚函数。
    (3)由成员函数调用,或者通过指针、引用来访问虚函数。
    如果使用对象名来访问虚函数,则联编在编译过程中就可以通过(静态联编),而无需在运行中进行。
    虚析构函数:
    如果一个类的析构函数时虚函数,那么,用它派生而来的所用子类的析构函数也是虚函数。析构函数设置为虚函数之后,在使用指针,引用时就可以动态联编,实现运行时的多态,保证使用基类类型的指针就能够调用适当的析构函数针对不同的对象进行清理工作。
    抽象类:
    (1)抽象类是一种特殊的类,它为一族类提供统一的操作界面,通过它为一个类族建立一个公共的接口,使类能够更加有效的发挥多态性。
    (2)建立抽象类,就是为了通过它多态地使用其中的成员函数。
    (3)抽象类处于其层次的上层,一个抽象类自身无法实现化,而只能通过继承机制。生成抽象类的非抽象派生类,然后实例化。但是,可以声明一个抽象类的指针和引用。
    (4)抽象类是带有纯虚函数的类。
    (5)抽象类派生出新类之后,如果派生类没有给出全部纯虚函数的实现,这时的派生类仍是一个抽象类。
    (6)纯虚函数:virtual 函数类型 函数名(参数表)=0;

    展开全文
  • SNP/单核苷酸多态性分析

    千次阅读 2018-10-19 11:02:00
    SNP/单核苷酸多态性分析 SNP(Single Nucleotide Polymorphism),即单核苷酸多态性,是由于单个核苷酸改变而导致的核酸序列多态。一般来说,一个SNP位点只有两种等位基因,因此又叫双等位基因。SNP在人类基因组中...

    SNP/单核苷酸多态性分析

    SNP(Single Nucleotide Polymorphism),即单核苷酸多态性,是由于单个核苷酸改变而导致的核酸序列多态。一般来说,一个SNP位点只有两种等位基因,因此又叫双等位基因。SNP在人类基因组中的发生频率比较高,大约平均每1000个碱基中就有一个多态位点。有些SNP位点还会影响基因的功能,导致生物性状改变甚至致病。单核苷酸多态性是研究人类家族和动植物品系遗传变异的重要依据,因此被广泛用于群体遗传学研究(如生物的起源、进化及迁移等方面)和疾病相关基因的研究,在药物基因组学、诊断学和生物医学研究中起重要作用。

     

    服务项目

     
     
     
    1.TaqMan探针法
    针对染色体上的不同SNP位点分别设计PCR引物和TaqMan探针,进行实时荧光PCR扩增。探针的5’-端和3’-端分别标记一个报告荧光基团和一个淬灭荧光基团。当溶液中存在PCR产物时,该探针与模板退火,即产生了适合于核酸外切酶活性的底物,从而将探针5’-端连接的荧光分子从探针上切割下来,破坏两荧光分子间的PRET,发出荧光。通常用于少量SNP位点分析(见图1)。

     

    图1 某SNP位点分析结果  A.纯合(G/G)  B.杂合(G/T)

     


    2.SNaPshot法

    该技术由美国应用生物公司(ABI)开发,是基于荧光标记单碱基延伸原理的分型技术,也称小测序,主要针对中等通量的SNP分型项目。在一个含有测序酶、四种荧光标记ddNTP、紧临多态位点5’-端的不同长度延伸引物和PCR产物模板的反应体系中,引物延伸一个碱基即终止,经ABI测序仪检测后,根据峰的移动位置确定该延伸产物对应的SNP位点,根据峰的颜色可得知掺入的碱基种类,从而确定该样本的基因型。对于PCR产物模板可通过多重PCR反应体系来获得。通常用于10-30个SNP位点分析(见图2)。

     

    图2 基因编码区9 个SNP 位点的SNaPshot 实验结果图谱

     

    3.HRM法
    高分辨率熔解曲线分析(HRM)是近几年兴起的SNP研究工具,它通过实时监测升温过程中双链DNA荧光染料与PCR扩增产物的结合情况,来判断是否存在SNP,而且不同SNP位点、是否是杂合子等都会影响熔解曲线的峰形,因此HRM分析能够有效区分不同SNP位点与不同基因型。这种检测方法不受突变碱基位点与类型的局限,无需序列特异性探针,在PCR结束后直接运行高分辨率熔解,即可完成对样品基因型的分析。该方法无需设计探针,操作简便、快速,成本低,结果准确,并且实现了真正的闭管操作(图3)。

    图3 某基因的SNP(G>A)进行HRM分析的结果。A图为熔解曲线,B图为差异图


    4.Mass Array法
    MassARRAY分子量阵列技术是Sequenom公司推出的世界上领先的基因分析工具,通过引物延伸或切割反应与灵敏、可靠的MALDI-TOF-MS技术相结合,实现基因分型检测。基于MassARRAY平台的iPLEX GOLD技术可以设计最高达40重的PCR反应和基因型检测,实验设计灵活,分型结果准确性高。根据应用需要,对数十到数百个SNP位点进行数百至数千份样本检测时,MassARRAY具有最佳的性价比,特别适合于对全基因组研究发现的结果进行验证,或者是有限数量的研究位点已经确定的情况。

    5.Illumina BeadXpress法
    采用Illumina公司的BeadXpress系统进行批量SNP位点检测,可以同时检测1-384个SNP位点,往往用于基因组芯片结果确认,适合高通量检测。微珠芯片具有高密度、高重复性、高灵敏度、低上样量、定制灵活等特点,极高的集成密度,从而获得极高的检测筛选速度,在高通量筛选时可显著降低成本。

    6.KASP基因分型技术
    KASP是竞争性等位基因特异性PCR(Kompetitive Allele Specific PCR)的缩写,可在广泛的基因组DNA样品中(甚至是一些复杂基因组的DNA样品),对SNPs和特定位点上的InDels进行精准的双等位基因判断。这项技术是基于引物末端碱基的特异匹配来对SNP分型以及检测InDels (Insertions and Deletions,插入和缺失)。

    送样要求

     
     
     
    细胞(≥106 )、组织(≥300mg)、血液(≥1ml)、基因组DNA(≥20μl,浓度≥50ng/μl)。

    提供结果

     
     
     
    检测SNP的原始数据、数据分析结果及书面报告。

    检测项目

     
     
     

    根据实验目的和通量的不同,阅微基因通过以下五种方式来提供SNP检测服务:

    技术优势

     
     
     
    经验丰富:国内最早应用SNaPshot方法的公司,10年经验,技术成熟,做过1000个以上案例

     

    服务全面:可以提供多种检测方法,可根据客户的样本量及位点数协助客户选择合适的实验方案

     

    结果准确:单个项目的检测结果都能保证不低于95%的检出率,如有特殊需求,可达到100%检出率

     

    技术先进:

    优化扩增体系,确保一次反应可以扩增出尽可能多的位点

    针对特殊结构位点,采用高效的DNA聚合酶,确保每个位点都有实验结果,确保客户数据的完整性

    可以针对口腔拭子、唾液等样本提取DNA

    可以提供基因分型等数据分析服务,包括HW平衡分析、聚类分析、品种鉴定、遗传图谱、关联分析、单体型分析等

    成功案例

     
     
     

    某医院客户有1000 以上样本,且只分析两个SNP位点,选用了Taqman-SNP 方法进行分型检测,散点图结果。

    Taqman-SNP 分型结果示例

    转载于:https://www.cnblogs.com/wangprince2017/p/9815213.html

    展开全文
  • 实验 六 多态性与虚函数

    千次阅读 2018-05-20 15:30:06
    一、实验目的和要求 了解静态联编的动态联编的概念。掌握动态联编的条件。二、实验内容1.分析并调试下列程序。//sy6_1.cpp #include&lt;iostream&gt; using namespace std; class Base { public: virtual...
  • C++中多态性和重载

    千次阅读 2018-07-02 18:53:05
    面向对象的三大特征: 1.封装:保证对象自身数据的完整、安全 2.继承:建立类之间的关系,实现代码复用、方便系统的扩展 3.多态:相同的方法调用可实现不同的实现方式。多态是指两个或
  • 多态性也分静态多态性动态多态性两种。静态多态性是指定义在一个类或一个函数中的同名函数,它们根据参数表(类型以及个数)区别语义,并通过静态联编实现,例如,在一个类中定义的不同参数的构造函数。动态多态
  • 多态性(一)——静态多态性

    千次阅读 2015-03-04 12:18:55
    多态性(polymorphism)是面向对象程序设计的一个重要特征。在面向对象方法中,一般是这样表述多态性的:... 从系统实现的角度来看,多态性分两类:静态多态性动态多态性。 静态多态性是通过函数重载实现的。要求在
  • 类的多态性的概念

    千次阅读 2013-08-27 16:32:10
    多态性(polymorphism)是面向对象程序设计的一个重要特征。利用多态性可以设计和实现一个易于扩展的系统。 在C++程序设计中,多态性是指具有不同功能的函数可以用同一个函数名,这样就可以用一个函数名调用不同内容...
  • c++虚函数的多态性.ppt

    2008-09-28 12:55:35
    发现网上有很朋友针对这个知识的问题比较,传个自己珍藏的ppt 共享,希望对大家有帮助。
  • 方法的重写、重载与动态连接构成多态性。Java之所以引入多态的概念,原因之一是它在类的继承问题上和C++不同,后者允许多继承,这确实给其带来的非常强大的功能,但是复杂的继承关系也给C++开发者带来了...
  • 实验6 多态性与虚函数(P285)

    千次阅读 2018-05-15 15:16:33
    实验目的和要求 了解静态联编的动态联编的概念。掌握动态联编的条件。实验内容1.分析并调试下列程序。//sy6_1.cpp#include&lt;iostream&gt;
  • t分布下FIGARCH模型的动态VaR计算,王吉培,旷志平,针对金融时间序列是有偏分布和“长记忆”的特征,本文讨论了偏t分布下分数维GARCH模型的动态VaR测算问题。在分析正态分布、学
  • 习题五 多态性和虚函数

    千次阅读 2018-06-27 21:54:00
    (2)C++支持两种多态性,静态联编所支持的多态性被称为 编译时的多态性 、动态联编所支持的多态性被称为 运行时的多态性 。(3)重载函数在编译时表现出多态性,就是 静态 联编;而虚函数则在运行时表现出多态...
  • Java多态性详解 (父类引用子类对象)

    千次阅读 2021-02-25 20:34:44
    方法的重写、重载与动态连接构成多态性。Java之所以引入多态的概念,原因之一是它在类的继承问题上和C++不同,后者允许多继承,这确实给其带来的非常强大的功能,但是复杂的继承关系也给C++开发者带来了...
  • 所以函数重载和虚函数在概念上的最大差别在于函数重载针对某个类里面的同名函数而言,而虚函数是针对基类和派生类之间同名函数而言。 在使用方式方面: 函数重载需要注意作用域,在内层作用域中声明的重载函数会...
  • 多态性与虚函数

    千次阅读 2011-08-22 15:18:44
    多态性与虚函数  面向对象理论中的3个术语:对象、方法和消息。对象(object):不言而喻,它是构成系统的基本单位,有属性和行为两个要素,在C++中,每个对象都是由数据和函数这两部分组成的,数据即是对象的...
  • C++多态性,虚函数,重载,抽象类

    千次阅读 2016-07-21 14:55:17
    1,C++多态性,虚函数,重载,比较有意思,,,,,, 在面向对象的程序中,当不同的对象接受到相同的消息产生不同的动作,这种性质称为多态性
  • 多态性

    千次阅读 2013-09-09 14:24:53
    面向对象程序设计中的多态性多态性(polymorphism)是面向对象编程的基本特征之... 从系统实现角度来看,多态性分为两类:静态多态性动态多态性。  静态多态性:在程序编译时系统就能决定调用哪个函数,因此静态函
  • 深入浅出,全方面理解java多态性,终极父类,instanceof,包装类等,还有一些踩坑点,不容错过
  • C++多态性

    万次阅读 2016-02-16 21:26:25
    1.2从系统实现的角度看,多态性分两类:静态多态性动态多态性。 静态多态性是通过函数重载(运算符重载也是函数重载)来实现的。它又称为编译时多态。 动态多样性是在程序运行过程中才动态确定操作所针对的对象。...
  • C++之“多态性

    千次阅读 2015-02-11 16:02:12
    多态性概述 一、定义  1、多态:是指同样的消息被不同类型的对象接受时导致完全不同的行为。多态分为编译时的多态和运行时的多态。  2、消息:是指对类的成员函数的调用。  3、编译时的多态:是在编译的...
  • 多态(Polymorphism),在面向对象语言中指的是同一个接口可以有多种不同的实现方式,OC中的多态则是不同对象对同一消息的不同响应方式,子类通过重写父类的方法来改变同一消息的实现,体现多态性。另外我们知道C++...
  • 实验六 多态性与虚函数

    千次阅读 2018-05-15 18:02:06
    实验目的和要求 了解静态联编的动态联编的概念。掌握动态联编的条件。实验内容1.分析并调试下列程序。(1)找出以上程序中使用了重载和覆盖函数。(2)写出程序的输出结果,并解释输出结果。程序的输出结果如下:2....
  • java 类的封装性、继承性、多态性

    千次阅读 2018-07-31 20:56:48
    多态性(Java允许单继承,派生类与基类间有IS-A的关系(即“猫”is a “动物”)。这样做虽然保证了继承关系的简单明了,但是势必在功能上有很大的限制,多态性的引入用来弥补这点的不足) 记录下看了一些博客...
  • 多态性定义

    千次阅读 2010-09-07 10:35:00
     多态性也分静态多态性动态多态性两种。静态多态性是指定义在一个类或一个函数钟的同名函数,它们根据参数表(类型以及个数)区别语义,并通过静态联编实现,例如,在一个类中定义的不同参数的构造函数。...
  • Java面向对象编程——多态性的实现

    千次阅读 2017-12-18 20:41:13
    Java中多态性的实现 一、使用父类类型的引用指向子类的对象 二、该引用只能调用父类中定义的方法和变量; 三、如果子类中重写了父类中的一个方法,那么在调用这个方法的 时候,将会调用子类中的这个方法;(动态...
  • 第十二章、多态性与虚函数     1,在C++中,多态性是指具有不同功能的函数可以用同一个函数名,这样就可以用一个函数名调用不同内容...动态多态性是在程序运行过程中才动态地确定操作所针对的对象;它是通过虚函数
  • 面向对象JAVA多态性

    千次阅读 2011-12-29 12:21:40
    在Java中,多态性是依靠动态绑定实现的,即Java 虚拟机 在运行时确定要调用哪一个同名方法。 多态的应用 由于多态性,一个父类的引用变量可以指向不同的子类对象,并且在运行时根据父类引用变量所指向...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 84,702
精华内容 33,880
热门标签
关键字:

动态多态性只针对