精华内容
下载资源
问答
  • Java中的运行时多态含义是什么?有什么作用?请举例说明
    2021-10-18 19:25:30

    运行时的多态:方法覆盖实现(子类覆盖父类方法)

    父类的引用指向子类对象,调用的方法子类的方法

    //父类
    class A {  
        void fun()  
        {  
            System.out.println(“I am A”);  
        }  
    }  
    
    //A的子类B
    class B extends A  
    {  
    
        void fun()  
        {      
            System.out.println(“I am B”);  
        }  
    }  
    
    //A的子类C  
    class C extends A  
    {  
    
        void fun()  
        {      
            System.out.println(“I am C”);  
        }  
    }  
    
    class Test  
    {  
        public static void main(String[] args)  
        {  
            //定义父类对象引用变量
            A a;
            //子类对象  
            B  b = new B();  
            C  c = new C();
            //父类对象引用变量 引用 子类对象  
            a=b;  
            a.fun();  //输出   I am B
            a=c;  
            a.fun();  // //输出   I am C
        }  
    }
    

    更多相关内容
  • 运行时的多态:一个接口,多个方法 1.父类的引用指向子类对象,掉用的方法是子类的方法 //父类 class A { void fun() { System.out.println(“I am A”); } } //A的子类B class B extends A { void ...

    运行时的多态:一个接口,多个方法

    1.父类的引用指向子类对象,掉用的方法是子类的方法

    //父类
    class A {  
        void fun()  
        {  
            System.out.println(“I am A”);  
        }  
    }  
    
    //A的子类B
    class B extends A  
    {  
    
        void fun()  
        {      
            System.out.println(“I am B”);  
        }  
    }  
    
    //A的子类C  
    class C extends A  
    {  
    
        void fun()  
        {      
            System.out.println(“I am C”);  
        }  
    }  
    
    class Test  
    {  
        public static void main(String[] args)  
        {  
            //定义父类对象引用变量
            A a;
            //子类对象  
            B  b = new B();  
            C  c = new C();
            //父类对象引用变量 引用 子类对象  
            a=b;  
            a.fun();  //输出   I am B
            a=c;  
            a.fun();  // //输出   I am C
        }  
    }
    

    2.通过接口指向不同的对象来实现不同的方法

    //定义接口InterA  
    interface InterA  
    {  
        void fun();  
    }  
    
    //实现接口InterA的类B  
    class B implements InterA  
    {  
        public void fun()  
        {      
            System.out.println(“This is B”);  
        }  
    }  
    
    //实现接口InterA的类C  
    class C implements InterA  
    {  
        public void fun()  
        {      
            System.out.println(“This is C”);  
        }  
    }  
    
    class Test  
    {  
        public static void main(String[] args)  
        {  
            //定义接口
            InterA  a;
            //接口类型变量引用实现接口的类的对象 
            a= new B();  
            a.fun();   
            a = new C();   
            a.fun();   
        }  
    }
    
    展开全文
  • 相信很多学习java的人对于java多态是非常了解的,它的...如果一个语言只支持类而不支持多态,只能说明它是基于对象的,而不是面向对象的。另外,多态是出现在具有继承关系的两个类的对象之间,所以它不像方法重载(发...

    相信很多学习java的人对于java多态是非常了解的,它的知识点也是非常重要的。今天就来为大家介绍一下,java多态是什么意思?并且用实例分享出来,一起来了解一下吧。

    首先,多态指同一个实体同时具有多种形式。它是面向对象程序设计(OOP)的一个重要特征。如果一个语言只支持类而不支持多态,只能说明它是基于对象的,而不是面向对象的。

    另外,多态是出现在具有继承关系的两个类的对象之间,所以它不像方法重载(发生在一个类中)在编译期间发生(也就是确定下来),而是在运行期间发生(确定下来)。

    1.一个父类类型的引用可以指向他任何一个子类的对象

    2.[相同]类域的[不同]对象执行[同一]方法的时候会有[不同]的表现

    有一个比较经典的多态实例:

    有一个Animal类,它有Cat,和Dog两个子类,在Animal中有个say方法,当Cat调用这个方法的时候输出的是“小猫喵喵喵”,当Dog调用这个方法时,输出的是“小狗汪汪汪”,这就是Java多态的实现。

    这里我们写另外一个:

    —父类:Person.java,代码如下所示:import java.util.Scanner;

    public class Person

    {

    public int salary;

    public int allSalary()

    {

    return 0;

    }

    public static void main(String[] args)

    {

    Person p = null;

    for (int n = 0; n 

    {

    @SuppressWarnings("resource")

    Scanner sc = new Scanner(System.in);

    System.out.println("请输入一个1-3的数字:\n1 is Teacher\n2 is Scientis\n3 is Waiter");

    int i = sc.nextInt();

    //分别指向了不同的子类,输出的结果是不一样的

    if (i == 1)

    {

    p = new Teacher(5000);

    System.out.println(p.allSalary());

    }

    else if (i == 2)

    {

    p = new Scientist(5000);

    System.out.println(p.allSalary());

    }

    else if (i == 3)

    {

    p = new Waiter(5000);

    System.out.println(p.allSalary());

    }

    else

    {

    System.out.println("?\n请输入1-3");

    }

    }

    }

    }

    —子类:Scientist .java,代码如下所示:public class Scientist extends Person

    {

    public Scientist(int salary)

    {

    this.salary = salary;

    }

    public int allSalary()

    {

    int aa = salary * 12 + 36500;

    System.out.print("五五开一年的工资:");

    return aa;

    }

    }

    Waiter.java,代码如下所示:public class Waiter extends Person

    {

    public Waiter(int salary)

    {

    this.salary = salary;

    }

    public int allSalary()

    {

    int aa = salary * 12;

    System.out.print("服务员一年的工资:");

    return aa;

    }

    }

    Teacher .java,代码如下所示:public class Teacher extends Person

    {

    public Teacher(int salary)

    {

    this.salary = salary;

    }

    public int allSalary()

    {

    int aa = salary * 12 + 3650;

    System.out.print("教师一年的工资:");

    return aa;

    }

    }

    以上就是关于java多态是什么意思的主要内容了。并且用实际的代码为大家展示出来了。如果你对java知识感兴趣,想要了解更多java实例,敬请关注奇Q工具网。

    推荐阅读:

    展开全文
  • 从字面上来理解多态不太容易,下面我们来举例说明一下。 主人家里养了两只动物,分别是一只鸭和一只鸡,当主人向它们发出“叫”的命令时,鸭会“嘎嘎嘎”地叫,而鸡会“咯咯咯”地叫。这两只动物都会以自己的方式来...
  • 什么是多态,JAVA 中多态 方法必须要被所在类或对象调用才有意义 若方法含有参数: 形参:方法声明时的参数。 实参:方法调用时实际传给形参的参数值。 JAVA里将实参数值传入方法的传递机制只有 值传递 在值...

    什么是多态,JAVA 中多态的实现机制

    首先声明啊,这里的多态不是生物学和物理学上的多态性,这个是指编程语言中的多态。

    官方说明:

    • 多态(英语:polymorphism)指为不同数据类型的实体提供统一的接口.
    • 多态是允许你将父对象设置成为一个或更多的他的子对象相等的技术。
    • 我们在程序中定义的引用变量所指向的具体类型和通过该引用变量的方法调用在编程的时候并不确定,当处于运行期间才确定。就是这个引用变量究竟指向哪一个实例对象,在编译期间是不确定的,只有运行期才能确定,这样不用修改源码就可以把变量绑定到不同的类实例上,让程序拥有了多个运行状态,这就是多态。

    看完是不是很懵逼?

    懵逼
    说人话就是:

    允许将子类类型的指针赋值给父类类型的指针,把不同的子类对象都当作父类来看。就比如你在一个京剧世家,有人邀请你们家出个人来唱一出戏,邀请函上写的是你父亲的名字,但很不凑巧你父亲病了,你只能穿上你父亲的戏服,装作你父亲去登台唱戏。台下的人只知道是你们家的人登台,可能你父亲,也可能是你家人代替你父亲。你为了不被发现是代替你父亲,你就要隐藏起来其他技能。这就是多态。


    多态又分为 编译时多态和运行时多态:

    • 编译时多态(静态):重载
    • 运行时多态(动态):重写

    演示代码如下:

     public class Father {	//父类
    
        void sing (){
            System.out.println("我是爸爸,我会唱京剧" + "\n");
        }
    }
    
    class Son extends Father{	//子类,继承父类
        void sing (){
            System.out.println("我是儿子,我会唱京剧" + "\n");
        }
    
        void kungFu (){
            System.out.println("我是儿子,我会武术" + "\n");
        }
    }
    
    class test{	//测试类
        public static void main(String[] args) {
            Father father = new Son();		//多态的表现
            father.sing();
        }
    }  
    

    在使用 “father.” 调用方法时能发现,弹出的方法里根本没有Son类的kungFu方法:
    方法提示框
    运行结果如下:
    结果
    儿子:嘻嘻,没被发现,装父亲成功了!
    描述


    扩展

    1.多态的实现机制

    术语版本:
    我们将引入Java静态分派和动态分派这个概念。

    • 静态分派:所有依赖静态类型来定位方法执行版本的分派动作。静态分派发生在编译阶段,因此确定静态分派的动作实际上不是由虚拟机来执行的,而是由编译器来完成。(编译时多态)
    • 动态分派:在运行期根据实际类型确定方法执行版本的分派动作。(运行时多态)

    简单版本:
    原理也很简单,父类或者接口定义的引用变量可以指向子类或者具体实现类的实例对象,由于程序调用方法是在运行期才动态绑定的,那么引用变量所指向的具体实例对象在运行期才确定。所以这个对象的方法是运行期正在内存运行的这个对象的方法而不是引用变量的类型中定义的方法。

    如果想深入的同学可以参考可以参考《深入理解Java虚拟机》。

    2.里氏代换原则

    里氏代换原则(LSP): 子类对象能够替换父类对象,而程序逻辑不变。

    里氏替换原则有至少以下两种含义:

    1. 里氏替换原则是针对继承而言的,如果继承是为了实现代码重用,也就是为了共享方法,那么共享的父类方法就应该保持不变,不能被子类重新定义。子类只能通过新添加方法来扩展功能,父类和子类都可以实例化,而子类继承的方法和父类是一样的,父类调用方法的地方,子类也可以调用同一个继承得来的,逻辑和父类一致的方法,这时用子类对象将父类对象替换掉时,当然逻辑一致,相安无事。
    2. 如果继承的目的是为了多态,而多态的前提就是子类覆盖并重新定义父类的方法,为了符合LSP,我们应该将父类定义为抽象类,并定义抽象方法,让子类重新定义这些方法,当父类是抽象类时,父类就是不能实例化,所以也不存在可实例化的父类对象在程序里。也就不存在子类替换父类实例(根本不存在父类实例了)时逻辑不一致的可能。不符合LSP的最常见的情况是,父类和子类都是可实例化的非抽象类,且父类的方法被子类重新定义,这一类的实现继承会造成父类和子类间的强耦合,也就是实际上并不相关的属性和方法牵强附会在一起,不利于程序扩展和维护。

    如何符合LSP?总结一句话 —— 就是尽量不要从可实例化的父类中继承,而是要使用基于抽象类和接口的继承。


    如有问题欢迎指正
    参考:
    https://blog.csdn.net/sunxianghuang/article/details/52280002
    https://www.zhihu.com/question/27191817/answer/145013324

    展开全文
  • 20170326_请说出C++多态含义

    千次阅读 多人点赞 2017-03-26 10:18:50
    20170326_请说出C++多态含义
  • 多态 多态,一个事务具备的不同形态就是多态 实例: 在教室,学习形态 逛超市,顾客形态 救落水孩子.英雄形态 对象的多态性 多态前提 要有继承,或者接口实现 要方法的重写 父类或者接口的引用变量指向子类或者...
  • 多态的概念、定义以及实现

    万次阅读 多人点赞 2019-09-26 19:51:38
    多态的概念 1. 多态 多态的概念:通俗来说,就是多种形态,具体点就是去完成某个行为,当不同的对象去完成时会产生出不同 的状态。 2.举个栗子 比如买票这个行为,当普通人买票时,是全价买票;学生买票时,是半价...
  • C++多态含义

    2018-04-15 08:18:01
    C++多态含义1、什么是多态?(1)通过继承同一个基类,产生了相关的不同的派生类,与基类中同名的成员函数在不同的派生类中会有不同的实现,也就是说:一个接口、多种方法。(2)多态是面向对象的重要技术之一,它...
  • 什么是多态?如何实现?只看这一篇就够了

    万次阅读 多人点赞 2020-04-12 20:00:12
    1. 多态的概念 1.1 概念 多态的概念:通俗来说,就是多种形态,具体点就是去完成某个行为,当不同的对象去完成时会产生出不同的状态。 2. 多态的定义及实现 2.1多态的构成条件 多态是在不同继承关系的类对象,去调用...
  • 继承与多态

    2021-07-31 21:59:01
    理解图解如下: super和this的含义: super:代表父类的存储空间标识(可以理解为父亲的引用)。 this :代表当前对象的引用(谁调用就代表谁)。 super和this的用法: 访问成员 this.成员变量 ‐‐ 本类的 super.成员...
  • java多态的一个例子

    千次阅读 2018-08-02 21:20:05
    这我们用一个例子来说明这句话所代表的含义:a2.show(b);  这里a2是引用变量,为A类型,它引用的是B对象,因此按照上面那句话的意思是说有B来决定调用谁的方法,所以a2.show(b)应该要调用B中的show(B obj),产生...
  • 面向对象编程有三大特性:封装、继承、多态,本文带大家来认识和了解这三个特性~ 补充 - 新式类 & 经典类 在python2.x中,新式类是继承了object类的子类,以及该子类的子类 子子类…;经典类就是没有继承没有...
  • ) 举例说明,用一个类描述动物呼吸这个场景: 运行结果: 牛呼吸空气 羊呼吸空气 猪呼吸空气 程序上线后,发现问题了,并不是所有的动物都呼吸空气的,比如鱼就是呼吸水的。修改时如果遵循单一职责原则,需要将...
  • 这我们用一个例子来说明这句话所代表的含义:a2.show(b);  这里a2是引用变量,为A类型,它引用的是B对象,因此按照上面那句话的意思是说有B来决定调用谁的方法,所以a2.show(b)应该要调用B中的show(B obj),产生...
  • 这里特别说明一点,java当中的方法只有final,static,private和构造方法是前期绑定 3、动态绑定: 后期绑定: 在运行时根据具体对象的类型进行绑定。 若一种语言实现了后期绑定,同时必须提供一些机制,可在运行...
  • 虚函数与多态 重载函数是多态性的一种简单形式, 虚函数允许函数调用与函数体的联系在运行时才进行,称为动态联编。 冠以关键字virtual的成员函数称为虚函数。 一个虚函数,在派生类界面相同的重载函数都保持虚...
  • :多态就是把子类对象赋值给父类(实现的接口)类型的变量,在编译时期是以父类(或接口)类型为标准去编译,在运行时是以父类(或接口)变量的真实类型去运行的,在编译时期可以屏蔽子类之间的实现差异,从而做到通用编程...
  • 多态含义 在面向对象(OOP)的程序设计语言中,封装,继承,多态与数据抽象是其基本特征。 在java语言中, 封装就是合并属性与行为来创建一种新的数据类型, 继承则是表明数据类型之间的某种关系(is-a或is-...
  • 多态一般分为两种。 重写式多态和重载式多态。 重载式多态 重载式多态,也叫编译时多态。也就是这种多态在编译时已经确定好了。方法名相同而参数列表不同的一组方法就是重载。在调用这种重载的方法时,通过传人不同...
  • 终于搞懂了面向对象概念,以及它的三个基本特征:封装、继承、多态
  • 含义2.抽象方法3.向上转型4.向下转型5.多态的应用 一.方法重写 1.原因 如果父类继承不能满足子类的需求,可以在子类中对父类的同名方法进行重写,以符合需求 2.重写 子类根据父类继承方法进行重新编写; 重写时,...
  • 多态

    2017-10-29 12:41:33
    C++多态性   C++编程语言是一款应用广泛,支持多种程序设计的计算机编程语言。我们今天就会为大家详细介绍其中C++多态性的一些基本知识...多态(polymorphism),字面意思多种形状。  C++多态性是通过虚函数来实现的
  • 【C++】virtual 与多态

    2020-03-09 19:48:29
    1 前言 The virtual keyword declares a virtual function or a virtual base class....多态(Polymorphism):当用于面向对象编程的范畴时,多态性的含义是指程序能通过引用或指针的动态类型获...
  • Java继承和多态

    2021-12-25 22:40:39
    文章目录本章学习要点Java类的封装例 1Java封装图书信息类Java继承(extends)简明教程例 1单继承继承的优缺点Java super关键字详解super调用...例 1Java方法重载例 1Java方法重写例 1Java多态性:Java什么是多态?例
  • 继承是对原有类的拓展,举例说明:我现在有一个Person类,但是我想要一个学生对象,他拥有Person类的所有属性和方法,此外他还有学号属性,及上课、写作业等一些方法,我可以创建一个Student类,但是我不想重复写...
  • java类的封装、继承、多态

    千次阅读 2021-02-28 13:17:43
    一、封装(encapsulation)封装性就是把类(对象)的属性和行为结合成一个独立的相同单位,并尽可能隐蔽类(对象)的内部细节,对外形成一个边界,只保留有限的...已知一个类Animal,该类的属性和方法如下表所示:属性说明...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 7,626
精华内容 3,050
热门标签
关键字:

举例说明多态的含义