精华内容
下载资源
问答
  • 多态概念和实现

    2021-06-05 13:44:59
    多态概念和实现 多态(因人而异)指的是同一时期方法调用,由于对象不同可能会有不同的行为。 多态的要点 1.多态的方法是多态,不是属性的多态(堕胎与属性无关)。 2.多态的存在要三个必要条件:继承、方法...

    多态的概念和实现

    多态(因人而异)指的是同一时期方法调用,由于对象不同可能会有不同的行为。

    多态的要点

    1.多态的方法是多态,不是属性的多态(堕胎与属性无关)。

    2.多态的存在要三个必要条件:继承、方法的重写、父类引用指向对象。

    3.父类引用指向子类对象后,用该父类引用调用子类重写的方法,此时多态就出现了。

    例子演示:

    (1)

    public class Animal {
        public void shout(){
            System.out.println("叫了一声");
        }
    }
    
    class Dog extends Animal{
        @Override
        public void shout(){
            System.out.println("汪汪汪!");
        }
    }
    class Cat extends Animal{
        @Override
        public void shout(){
            System.out.println("喵喵喵!");
        }
    }
    
    class Mouse extends Animal{
    
    }
    

    (2)

    public class Test {
    
        static void animalCry(Animal a) {
            a.shout();    //多态
        }
    
        public static void main(String[] args) {
            Dog d = new Dog();
            animalCry(d);
            animalCry(new Cat());
        }
    }
    

    展开全文
  • 什么是多态?1.多态的定义指允许不同类的对象对同一消息做出响应。即同一消息可以根据发送对象的不同而采用多种不同的行为方式(发送消息就是函数调用)2.多态的作用消除类型之间的耦合关系3.多态的说明近代网络小说...

    一.什么是多态?

    1.多态的定义

    指允许不同类的对象对同一消息做出响应。即同一消息可以根据发送对象的不同而采用多种不同的行为方式(发送消息就是函数调用)

    2.多态的作用

    消除类型之间的耦合关系

    3.多态的说明

    近代网络小说泛滥,我们可以用它来举一个例子

    某日你看见你手机上有多部小说同时更新了,比如有大主宰,雪鹰领主,龙王传说…在这里我们可以描述成如下:

    小说a=大主宰

    小说b=雪鹰领主

    小说c=龙王传说

    这里所表现的就是多态,大主宰,雪鹰领主,龙王传说都是小说的子类,我们仅仅可以通过小说这个父类就能够引用不同的子类,这就是多态–我们只有在运行的时候才会知道引用变量所指向的具体实例对象

    当然,这样的理解是是远远不够的,要对多态的理解入门就必须要明白是”向上转型”

    在上面的例子中,小说(XS)是父类,大主宰(DZZ),雪鹰领主(XYLZ),龙王传说(LWCS)都是其子类 于是,我们定义如下代码

    DZZ a=new DZZ();

    对于这段代码应该都不会感觉到陌生,无非就是实例化了一个大主宰的对象 那么对于如下的这段代码呢?

    XS a=new DZZ();

    在这里我们这样理解,这里定义了一个XS类型的a,让它指向了DZZ对象实例。由于DZZ是继承于XS,所以DZZ可以自动向上转型为XS,所以a可以指向DZZ实例对象的。这样做存在一个非常大的好处,在继承中我们知道子类是父类的扩展,它可以提供比父类更加强大的功能,如果我们定义了一个指向子类的父类引用类型,那么它除了能够引用父类的共性外,还可以使用子类强大的功能

    但是向上转型也存在一些缺憾,那就是它必定会导致一些方法和属性的丢失,而导致我们不能够获取它们。所以父类类型的运用可以调用父类中定义的所有属性和方法,对于只存在与子类中的方法和属性它就望尘莫及了

    public class XS {

    public void fun1() {

    System.out.println("XS中的fun1");

    fun2();

    }

    public void fun2() {

    System.out.println("XS中的fun2");

    }

    }

    public class DZZ extends XS{

    /*

    * 子类重载父类方法

    * 父类中不存在该方法,向上转型后,父类是不能引用该方法的

    */

    public void fun1(String a) {

    System.out.println("DZZ中的fun1");

    fun2();

    }

    /*

    * 子类重写父类方法

    * 调用必定使用这个方法

    */

    public void fun2() {

    System.out.println("DZZ中的fun2");

    }

    }

    public class DuoTaiTest {

    public static void main(String[] args) {

    XS a=new DZZ();

    a.fun1();

    }

    }

    output:

    XS中的fun1

    DZZ中的fun2

    所以对于多态我们可以总结如下:

    指向子类的父类引用由于向上转型了,它只能访问父类中拥有的方法和属性,而对于子类中存在而父类中不存在的方法,该引用是不能使用的,尽管是重载该方法。若子类重写了父类中的某些方法,在调用该些方法的时候,必定是使用子类中定义的这些方法(动态连接,动态调用)

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

    二.多态的实现

    1.实现条件

    在刚刚开始就剃刀了继承在为多态的实现做了准备。子类Child继承父类Father,我们可以编写一个指向子类的父类类型引用,该引用既可以处理父类Father对象,也可以处理子类Child对象,当相同的消息发送给子类或者父类对象时,该对象就会根据自己所属的引用而执行不同的行为,这就是多态。即多态性就是相同的消息使得不同的类做出不同的响应

    Java实现多态有三个必要条件:继承,重写,向上转型

    继承:在多态中必须存在有继承关系的子类和父类

    重写:子类对父类中某些方法进行重新定义,在调用这些方法时就会调用子类的方法

    向上转型:在多态中需要将子类的引用赋给父类对象,只有这样该引用才能够具备技能调用父类的方法和子类的方法

    只有满足了上述三个条件,我们才能够在同一个继承结构中使用同一的逻辑实现代码处理不同的对象,从而达到执行不同的行为

    对于Java而言,它多态的实现机制遵循一个原则:当超类对象引用变量引用子类对象时,被引用对象的类型而不是引用变量的类型决定了调用谁的成员方法,但是这个被调用的方法必须是在超类中定义过的,也就是说被子类覆盖的方法

    2.实现形式

    继承

    public class XS {

    private String name;

    public String getName() {

    return name;

    }

    public void setName(String name) {

    this.name = name;

    }

    public XS() {

    }

    public String drink() {

    return "你看的小说名字:"+getName();

    }

    public String toString() {

    return null;

    }

    }

    public class DZZ extends XS{

    public DZZ() {

    setName("DZZ");

    }

    public String drink() {

    return "你看的小说名字:"+getName();

    }

    public String toString() {

    return "小说名:"+getName();

    }

    }

    public class XYLZ extends XS{

    /**

    *

    */

    public XYLZ() {

    setName("XYLZ");

    }

    public String drink() {

    return "你看的小说名字:"+getName();

    }

    public String toString() {

    return "小说名:"+getName();

    }

    }

    public class DuoTaiTest {

    public static void main(String[] args) {

    XS [] xs=new XS[2];

    DZZ a=new DZZ();

    XYLZ b=new XYLZ();

    xs[0]=a;

    xs[1]=b;

    for(int i=0;i<2;i++) {

    System.out.println(xs[i].toString()+"::::"+xs[i].drink());

    }

    System.out.println("-------------------");

    }

    }

    ouput:

    小说名:DZZ::::你看的小说名字:DZZ

    小说名:XYLZ::::你看的小说名字:XYLZ

    -------------------

    在上面的代码中DZZ,XYLZ继承XS 并且重写了drink(),toString()方法,程序运行结果是调用子类中方法,输出DZZ,XYLZ的名称,这就是多态的表现。不同的对象可以执行相同的行为,但是他们都需要通过自己的实现方式来执行,这就要得益于向上转型了

    我们都知道所有的类都继承自超类Object,toString()方法也是Object中方法,当我们这样写时:

    Object o = new DZZ();

    System.out.println(o.toString());

    output:

    小说名:DZZ

    Object,XS,DZZ三者继承链关系是:DZZ—>XS—>Object。所以我们可以这样说:当子类重写父类的方法被调用时,只有对象继承链中的最末端的方法才会被调用。但是注意如果这样写:

    Object o = new xs();

    System.out.println(o.toString());

    output:

    null//因为DZZ并不存在于该对象继承链中

    所以基于继承实现的多态可以总结如下:对于引用子类的父类类型,在处理该引用时,它适用于继承该父类的所有子类,子类对象的不同,对方法的实现也就不同,执行相同动作产生的行为也就不同。

    如果父类是抽象类,那么子类必须要实现父类中所有的抽象方法,这样该父类所有的子类一定存在统一的对外接口,但其内部的具体实现可以各异。这样我们就可以使用顶层类提供的统一接口来处理该层次的方法。

    本篇文章的内容希望能给需要的朋友一些帮助

    展开全文
  • 多态概念和类型

    2021-06-13 18:39:01
    以“+”运算符为例,“+”可以实现整型变量之间、浮点型变量之间的加法运算,也可以实现不同类型变量之间的加法运算,例如整型变量浮点型变量相加,这时需要先将整型变量转换为浮点变量再进行加法运算。...

    消息

    消息在C++编程中指的是对类的成员函数的调用。

    多态

    多态就是指相同的消息被不同类型的对象接收会引起不同的操作,直接点讲,就是在不同的情况下调用同名函数时,可能实际调用的并不是同一个函数。

    以“+”运算符为例,“+”可以实现整型变量之间、浮点型变量之间的加法运算,也可以实现不同类型变量之间的加法运算,例如整型变量和浮点型变量相加,这时需要先将整型变量转换为浮点变量再进行加法运算。

    同样是加法运算,参与运算的变量类型不同时,进行加法运算的方式也不同。这就是多态的典型例子。

    多态的类型

    多态性有四种类型:重载多态、强制多态、参数多态和包含多态。

    前两种可以统称为专用多态。之前讲过普通函数的重载和类的成员函数的重载,它们都属于重载多态。

    上面说的整型变量和浮点型变量相加时,需要先把整型变量强制转换为浮点型再进行加法运算,这就是强制多态。从概念上讲,强制多态就是将一个变量的类型进行转换,以满足一个函数运算的要求。

    后两种统称为通用多态。前面讲过的类模板将类型参数化,设定了确定的类型才可以实例化。

    由类模板实例化得到的所有类都有相同的操作,但是被操作对象的类型不同,这就是参数多态。

    包含多态是指类族中不同类的同名成员函数实现的操作不相同。包含多态一般通过虚函数来实现。虚函数在我们进行软件开发设计时会经常用到,初学者在有了一定经验后会越来越多的使用虚函数。

    多态的实现

    从多态实现的阶段不同来分类可以分为编译时的多态和运行时的多态。

    编译时的多态是指在编译的过程中就确定了具体调用同名函数中的哪个函数,而运行时的多态则是在程序运行过程中才动态的确定调用的具体函数。

    这种确定调用同名函数的哪个函数的过程就叫做联编或者绑定。一般称其为绑定。绑定实际上就是确定某个标识符对应的存储地址的过程。

    按照绑定发生的阶段的不同可以分为:静态绑定和动态绑定。静态绑定就对应着编译时的多态,动态绑定对应运行时的多态。

    如果绑定过程发生在编译链接阶段,则称为静态绑定。在编译链接过程中,编译器根据类型匹配等特征确定某个同名标识究竟调用哪一段程序代码,也就是确定通过某个同名函数到底调用哪个函数体。

    四种多态中有三种需要静态绑定:重载多态、强制多态和参数多态。

    而如果绑定过程发生在程序运行阶段,则成为动态绑定。在编译链接过程中无法确定调用的具体函数,就要等到程序运行时动态确定。包含多态就需要使用动态绑定实现。

    展开全文
  • 一、多肽的概念 多肽是指同一个操作作用于某一类对象,可以有不同的...1、多肽通过分离做什么怎么做,从一个角度将接口和实现进行分离 2、多肽消除了类型之间的耦合关系 3、多肽的存在提高了程序的拓展性后期的可维

    一、多肽的概念

    多肽是指同一个行为具有多个不同表现形式或形态的能力
    (如:吃这个动作,对动物来说都可以发生这个动作,但是猫吃和狗吃是不同的,因为它们吃的东西不同)
    多肽存在的三个必要条件:
    1、需要存在继承或实现(接口)关系
    接口(interface)是一个抽象的类型,只提供方法的定义。
    实现类是接口的具体实现,要实现每一个接口的功能
    2、同样的方法调用而不执行操作、运行不同代码(重写)
    3、在运行时父类或接口的应用变量可以引用其子类的对象
    语法:接口 + 接口变量 = new 实现类
    多肽的作用:
    1、多肽通过分离做什么和怎么做,从一个角度将接口和实现进行分离
    2、多肽消除了类型之间的耦合关系
    3、多肽的存在提高了程序的拓展性和后期的可维护性

    abstract class Animal {
    	public String name;
    
    	public void eat() {
    	};
    }
    
    class Dog extends Animal {
    	public void eat() {
    		System.out.println("狗吃翔");
    	}
    }
    
    class Cat extends Animal {
    
    	public void eat() {
    		System.out.println("猫吃鱼");
    
    	}
    }
    
    public class Test {
    	public static void main(String[] arge) {
    		Animal anl = new Dog();
    		Animal an2 = new Cat();
    
    		anl.eat();
    		an2.eat();
    	}
    }
    
    

    二、对象的上下转型
    2.1、由子类转型成父类,在继承图上是向上移动的,一般称为向上转型
    2.2、向上转型是一个较专用类型向通用类型的转换,故比较安全,也就是说子类是父类的超级(如:以上代码中new一个dog就是,向上转型)
    2.3、向上转型过程中,类接口中唯一可能发生的事情是丢失方法,而不是获取方法
    2.4与之相反的操作是向下转型,不安全(需要instanceof操作符协助)

    instanceof运算符用来运行时通过返回值来指出是否特定类或者是它是的子类的一个实例
    用法:
    result=object instanceof class
    result:布尔类型
    object:必须项,任意对象表达式
    class:必选项,任意已定义的对象类
    注意:如果object是class或其子类的实例,则instanceof运算符返回TRUE,反之返回FALSE。
    使用场合:
    在对对象做下转型之前,没有其他有关对象信息时务必使用instanceof来判断,以避免抛出茶classCastException异常

    abstract class Animal {
    	public String name;
    
    	public void eat() {
    	};
    }
    
    class Dog extends Animal {
    	public void eat() {
    		System.out.println("狗吃翔");
    	}
    
    	public void sleep() {
    		System.out.println("我要睡觉");
    	}
    }
    
    class Cat extends Animal {
    
    	public void eat() {
    		System.out.println("猫吃鱼");
    
    	}
    
    	public void catchMouse() {
    		System.out.println("抓老鼠");
    	}
    }
    
    public class Test {
    	public static void main(String[] arge) {
    		Animal an1 = new Dog();
    		Animal an2 = new Cat();
    		Dog dog = new Dog();
    		dog.sleep();
    		an1.eat();
    		an2.eat();
    		if (an2 instanceof Cat) {
    			System.out.println("aa");
    			Cat cat = (Cat) an2;
    		}
    	}
    }
    
    

    在这里插入图片描述

    展开全文
  • Java基本概念多态

    千次阅读 2021-03-01 06:16:25
    一、简介描述:多态性是面向对象编程中的一个重要特性,主要是用来实现动态联编的。换句话说,就是程序的最终...多态可以让我们不用关心某个对象到底是什么具体类型,就可以使用该对象的某些方法,从而实现更加灵活...
  • 一、多态概念 多态性是指同一个操作作用于某一类对象,可... 多态通过分离做什么怎么做,从一个 角度将接口和实现进行分离 多态消除了类型之间的耦合关系 多态的存在提高了程序的拓展性后期的可维护性 ...
  • Java如何实现多态

    千次阅读 2021-02-12 10:24:44
    1、多态就是指程序中定义的引用变量所指向的具体类型通过该引用变量发出的方法调用在编译时并不确定,而是在程序运行期间才确定,即一个引用变量倒底会指向哪个类的实例对象,该引用变量发出的方法调用到底是哪个...
  • 在学习Java的过程中,我们无论如何也绕不过多态这个东西。它到底是个什么东西呢?其实,它就是指调用相同名字的方法,但是得到的结果是不同的。第一: 对象是方法多态的作用范围是方法,不是类不是对象,也不是对象...
  • 多态实现原理

    2021-05-14 09:37:07
    多态实现原理 多态概念 多态的构成条件 虚函数 虚函数的重写(覆盖) 多态的原理 虚函数表指针及虚函数表 派生类的虚函数表 多态概念 顾名思义,多态即多种形态。 定义:不同继承关系的类对象,调用同一函数,...
  • 今天就来为大家介绍一下,java多态实现方式是怎样的?一起来了解一下吧。很多地方都写着多态三要素是: 继承、重写、向上转型。其实这个写法根本就是错的多态的意思就是一种概念,多种表现形式,这个才是多态。java...
  • Java多态概念与应用

    千次阅读 多人点赞 2021-03-07 12:33:28
    1.1 多态概念 多态指的是同一个行为具有多个不同表现形式或形态的能力。是不是感觉很抽象,很难理解。没关系,接下来将用一个小demo带你了解多态的概念优点。 提示:文章写完后,目录可以自动生成,如何生成可参考...
  • 一 : 多态 1.1 什么是多态 多态: 把子类对象伪装成父类类型 让父类类型指向子类对象 ...总而言之:多态对象除了重写的方法 其他父类对象完全相同 1.3 什么时候使用多态 情况1 cat类 dog类 饲养员类: we
  • java 接口实现多态

    2021-03-01 08:08:56
    Java基础学习笔记八 Java基础语法之接口和多态 接口 接口概念 接口是功能的集合,同样可看做是一种数据类型,是比抽象类更为抽象的”类”.接口只描述所应该具备的方法,并没有具体实现,具体的实现由接口的实现类(相当...
  • PHP中多态如何实现

    2021-03-23 22:30:35
    PHP中多态如何实现PHP是一种HTML内嵌式的,用来制作动态网页的服务器端的脚本语言。以下是百分网小编整理的PHP中多态如何实现的内容,欢迎学习!...其特点是:开发周期短,稳定安全,简单易学,免费...2 多态概念封装...
  • 很多人表示,自己对于多态概念不是很清楚,那么下面就让我们一起来详细的了解一下吧。1、什么是多态多态简单的来说就是一种事物的多种存在形态。在面向对象语言当中,接口的多种不同的实现方式就被叫做多态。...
  • 多态是一种不同的对象以单独的...大多数面向对象语言的多态特性都仅以虚拟函数的形式来实现,但C++除了一般的虚拟函数形式之外,还多了两种静态的(即编译时的)多态机制:1、操作符重载:例如,对整型串对象应用...
  • 多态的基本概念——C++

    千次阅读 2021-01-14 23:00:24
    动态多态:派生类虚函数实现运行时多态 2、区别: 静态多态函数地址早绑定,编译阶段确定函数地址 动态多态的函数地址晚绑定,运行阶段确定函数地址 3、动态多态满足条件 有继承关系 子类重写父类的虚函数...
  • 学习java刚刚入门的小伙伴们,不知道大家在初次接触java中的多态概念的时候,是否能清晰的讲出实现多态的机制是什么吗?什么才是java中的多态呢?多态性是指的面向对象程序设计代码重用的一个重要的机制,对于Java多...
  • 多态概念和作用

    2021-11-22 16:57:40
    多态概念和作用多态概念面向对象方法的多态性是指多态的作用两种用于多态的机制向上转型 多态概念 面向对象的三大特征之一 封装、继承、多态 多态是三大特性中最后出现也是最重要的特性,前面的封装继承...
  • Java中多态是个很难理解的概念,但同时又是非常重要的概念,Java三大特性(封装、继承、多态)之一,我们从字面上理解,就是一种类型的多种状态,一下通过卖小汽车的例子再次说明什么是多态,其中利用到了接口。...
  • 多态实现的前提:1,必须要有继承关系. 2,必须有方法重写. 3,必须是从父类对象指向子类对象. 多态案例详解 需求:主人养了一只狗一只猫,需要给它们进行喂食,(使用父类作为方法形参,子类作为实参传递使用) 首先...
  • 什么是多态,JAVA 中多态 方法必须要被所在类或对象调用才有意义 若方法含有参数: 形参:方法声明时的参数。 实参:方法调用时实际传给形参的参数值。 JAVA里将实参数值传入方法的传递机制只有 值传递 在值...
  • //2、动态多态:派生类虚函数实现运行时多态 一般C++中的多态只动态多态 //区别 //静态多态的函数地址是早绑定的 - 编译阶段确定函数地址 //动态多态的函数地址是晚绑定的 - 运行阶段确定函数地址 //动物类 class...
  • java多态实现java的多态和c++一样,是通过动态绑定或者说运行时绑定来实现的。当调用某一个对象引用的方法时,因为编译器并不知道这个引用到底指向的是变量声明时说明的类型对象,还是该类型子类的对象。因此编译器...
  • 1. 多态概念和补充 1.1. 对象具有两种类型 1.2. 多态的前提: 1.3. 多态的特点: 1.4. 多态的好处: 2. 多态方法调用的问题: 2.1. 情况1: 若方法只存在于父类中, 在子类不存在 2.2. 情况2: 若方法只存在于子类中, 在...
  • 由于Animial实现了run()方法,因此,DogCat作为它的子类,什么事也没干,就自动拥有了run()方法: dog = Dog() dog.run() cat = Cat() cat.run() 运行结果如下: Animal is running... Animal is running... 当然...
  • 多态override->重写(=覆盖)override是重写(覆盖)了一个方法,以实现不同的功能。一般是用于子类在继承父类时,重写(重新实现)父类中的方法。重写(覆盖)的规则:1、重写方法的参数列表必须完全与被重写的方法的...
  • 反射和多态事实上,反射和多态这两种技术并无直接联系,之所以把它们放在一起说,是因为,在Java技术体系中所提供的能够让我们在运行时识别对象类的类型信息的方式,一共有两种:即反射和多态关键...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 112,215
精华内容 44,886
关键字:

多态的概念和实现