我的编程空间,编程开发者的网络收藏夹
学习永远不晚

怎样理解Java中的多态

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

怎样理解Java中的多态

今天就跟大家聊聊有关怎样理解Java中的多态,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。

    一、多态的概念

           继承关系使一个子类能继承父类的特征,并且附加一些新特征。子类是它的父类的特殊化,每个子类的实例都是其父类的实例,但是反过来不成立。例如:每个圆都是一个几何对象,但并非每个几何对象都是圆。因此,总可以将子类的实例传给需要父类型的参数。参考案例如下:

    public class PolymorphismDemo{public static void main(String[] args){  displayObject(new Circle(1,"red",false));  displayObject(new Rectangle(1,1,"black",true));} public static void displayObject(GeometriicObject object){  System.out.println("Created on "+ object.getDateCreated()+".Color is"+object.getColor());}}

    Created on Mon Mar 09 19:25:20 EDT 2011.Color is red

    Created on Mon Mar 09 19:25:20 EDT 2011.Color is black

           方法displayObject具有GeometriicObject类型的参数。可以通过传递任何一个GeometriicObject的实例来调用displayObject。使用父类对象的地方都可以使用子类的对象。这就是通常说的多态。简单来说,多态意味着父类型的变量可以引用子类型的对象

    二、多态的特点

     多态的前提:继承(即必须有子父类关系。)在使用多态后的父类引用变量调用方法时,会   调用子类重写后的方法。 定义格式:父类类型 变量名=new 子类类型();                                                                       父类引用指向子类对象,如:Animal a = new Cat(); 多态中,编译看左边,运行看右边

    三、instanceof操作符

           instanceof是Java的关键字。Java关键字中的每个字母都是小写的。

           为了更好地理解类型转换,可以认为它们类似于动物、北极熊、熊猫之间的关系,其中动物类Animal是北极熊类Polar bear和熊猫类Panda类的父类。北极熊是动物,所以,总是可以将 Polar bear的实例安全地赋值给Animal变量。该关键字用法是判断某个对象是否属于某种数据类型,返回值为布尔类型。

             Fu Zz=new Xu();        Fu Zzz=new yiting();        if(f1 instanceof Xu){            System.out.println("Zz是Xu的类型");        }        else{            System.out.println("Zzz是yiting的类型");        }

    四、多态的转型

    1、向上转型

           总是可以将一个子类的实例转换为一个父类的变量,称为向上转换,因为子类的实例总是它的父类的实例。

    作用:

    减少一些重复的代码对象实例化的时候可以根据不同需求实例化不同的对象

    package project2;class Animal{int num=100;void say(){System.out.println("It's an Animal.");}} class Cat extends Animal{int num=50;void say(){System.out.println("It's a Cat.");}void bark(){System.out.println("喵喵喵!");}} public class project2{public static void main(String[] args) {Animal cat=new Cat();//向上转型System.out.println(cat.num);cat.say();//cat.bark();}}

    运行结果:

    100
    It's a Cat.

    向上转型不要强制转型,父类引用指向的或者调用的方法是子类的方法,这个叫动态绑定。向上转型后父类引用不能调用子类自己的方法。

    2、向下转型

           把一个父类的实例转换为它的子类变量。必须使用转换标记(子类名)进行显示转换,向编译器表明你的意图。为使转换成功,必须确保要转换的对象是子类的一个实例。

    作用:

            向上转型时 ,会遗失子类对象独有的其他方法;可以通过向下转型再重新转回。

    package project2;class Animal{int num=100;void say(){System.out.println("It's an Animal.");}} class Cat extends Animal{int num=50;void say(){System.out.println("It's a Cat.");}void bark(){System.out.println("喵喵喵!");}} public class project2{public static void main(String[] args) {Animal cat=new Cat();//向上转型Cat cat2=(Cat) cat;//向下转型System.out.println(cat2.num);cat2.say();cat2.bark();}}

    运行结果:

    50
    It's a Cat.
    喵喵喵!

    五、方法重写

    提示:要重写一个方法,需要在子类中使用和父类一样的签名来对该方法进行定义。

    子类从父类中继承方法。有时,子类需要修改父类中定义的方法的实现,这称为方法重写。

    以下几点值得注意:

    重写的方法必须与被重写的方法具有一样的签名,以及一样或者兼容的返回类型。兼容的含义是重写方法的返回类型可以是被重写方法的返回类型的子类型。仅当实例方法可访问时,它才能被重写。如果子类中定义的方法在父类中是私有的,那么这两个方法完全没有关系。与实例方法一样,静态方法也能被继承。但是,静态方法不能被重写。如果父类定义的静态方法在子类中被重新定义,那么在父类中定义的静态方法将被隐藏。可以使用语法“父类名.静态方法名”调用隐藏的静态方法。防止继承和重写

           一个被final修饰的类和方法都不能被继承。被final修饰的数据域是一个常数。

           有时候,可能希望防止类被继承。在这种情况下,使用final修饰符表明一个类是最终类,是不能作为父类的。Math类就是一个最终类。String、StringBuilder和StringBuffer类以及所有基本数据类型的包装类也都是最终类。例如,如下类A 就是最终类,不能被继承:

    public final class A{  //Data fields,constructors, and methods omitted}

           也可以定义一个方法为最终,最终方法不能被它的子类重写。例如如下,不能被重写:

    public class Test {  //Data fields,constructors, and methods omitted   public final void m() {    // Do something }}

    注:修饰符public、protected、private、static、abstract以及final可以用在类和类的成员上,只有final修饰符还可以用在方法中的局部变量上。方法内的final局部变量就是常量。

    为了重写一个方法,必须使用与它的父类中的方法一样的签名、一样或者兼容的返回类型来定义子类中的方法。实例方法只有在可访问时才能重写。这样,私有方法是不能重写的,因为它是不能在类本身之外访问的。如果子类中定义的方法在父类中是私有的,那么这两个方法是完全没有关系的噢!静态方法与实例方法一样可以继承。但是,静态方法不能重写,如果父类中定义的静态方法在子类中重新定义,那么父类中定义的方法被隐藏。可以使用表达式obj instanceof AClass 测试一个对象是否是一个类的实例。可以使用final修饰符来表明一个类是最终类,是不能被继承的;也可以表明一个方法是最终的,是不能被重写的。

    看完上述内容,你们对怎样理解Java中的多态有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注编程网行业资讯频道,感谢大家的支持。

    免责声明:

    ① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

    ② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

    怎样理解Java中的多态

    下载Word文档到电脑,方便收藏和打印~

    下载Word文档

    猜你喜欢

    怎样理解Java中的多态

    今天就跟大家聊聊有关怎样理解Java中的多态,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。一、多态的概念 继承关系使一个子类能继承父类的特征,并且附加一些新特征。子类是它
    2023-06-22

    java多态怎么理解

    这篇文章主要介绍java多态怎么理解,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!在java中,多态是同一个行为具有多个不同表现形式或形态的能力;多态就是同一个接口,使用不同的实例而执行不同操作。多态的优点:1、消除
    2023-06-14

    Java多态性怎么理解

    本篇内容主要讲解“Java多态性怎么理解”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Java多态性怎么理解”吧!面向对象编程有三个特征,即封装、继承和多态。封装隐藏了类的内部实现机制,从而可以
    2023-06-17

    如何理解Java多态中的动态绑定和静态绑定

    如何理解Java多态中的动态绑定和静态绑定,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。在多态中:成员变量和静态方法编译和运行都看左边;成员方法编译看左边,运行看右边,这是为什
    2023-06-02

    怎样理解动态ip

    怎样理解动态ip,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。通过Modem、ISDN、ADSL、有线宽频、小区宽频等方式上网的计算机,每次上网所分配到的IP地址都不相同,
    2023-06-05

    java中多态的原理是什么

    今天就跟大家聊聊有关java中多态的原理是什么,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。Java的优点是什么1. 简单,只需理解基本的概念,就可以编写适合于各种情况的应用程序;2
    2023-06-14

    java中多态概念、实现原理详解

    一.什么是多态?1.多态的定义指允许不同类的对象对同一消息做出响应。即同一消息可以根据发送对象的不同而采用多种不同的行为方式(发送消息就是函数调用)2.多态的作用消除类型之间的耦合关系3.多态的说明近代网络小说泛滥,我们可以用它来举一个例子
    2023-05-31

    Java基础:多态的理解与应用

    多态概述1.多态是继封装、继承之后,面向对象的第三大特性。2.多态现实意义理解:现实事物经常会体现出多种形态,如学生,学生是人的一种,则一个具体的同学张三既是学生也是人,即出现两种形态。Java作为面向对象的语言,同样可以描述一个事物的多种形态。如Studen
    Java基础:多态的理解与应用
    2019-02-14

    java对象实例化过程中的多态特性怎么理解

    本篇内容主要讲解“java对象实例化过程中的多态特性怎么理解”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“java对象实例化过程中的多态特性怎么理解”吧!java 对象实例化过程中的多态特性执行
    2023-06-21

    java中多态原理的示例分析

    这篇文章将为大家详细讲解有关java中多态原理的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。Java可以用来干什么Java主要应用于:1. web开发;2. Android开发;3. 客户端开发
    2023-06-14

    python 多态的理解

    1 class Human(object): # 父类 :创建“人”类 2 3 def __init__(self): 4 5 print('Ill pound the code and buy you
    2023-01-30

    Java中怎么实现多态

    这篇文章将为大家详细讲解有关Java中怎么实现多态,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。多态多态就是指程序中定义的引用变量所指向的具体类型和通过该引用变量发出的方法调用在编程时并不确
    2023-06-20

    详解java 中的动态代理

    这期内容当中小编将会给大家带来有关详解java 中的动态代理,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。Java动态代理相关先来看静态代理模式代码:package test; public inter
    2023-05-31

    C#多态性怎么理解

    这篇文章主要讲解了“C#多态性怎么理解”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“C#多态性怎么理解”吧!C#多态性的内涵实际就是通过继承,一个类可以用作多种类型:可以用作它自己的类型、任
    2023-06-17

    java中实现多态的原理是什么

    什么是多态?多态就是指一个引用变量倒底会指向哪个类的实例对象,该引用变量发出的方法调用到底是哪个类中实现的方法,必须在由程序运行期间才能决定。因为在程序运行时才确定具体的类,这样,不用修改源程序代码,就可以让引用变量绑定到各种不同的类实现上,从而导致该引用调用
    java中实现多态的原理是什么
    2020-11-11

    编程热搜

    • Python 学习之路 - Python
      一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
      Python 学习之路 - Python
    • chatgpt的中文全称是什么
      chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
      chatgpt的中文全称是什么
    • C/C++中extern函数使用详解
    • C/C++可变参数的使用
      可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
      C/C++可变参数的使用
    • css样式文件该放在哪里
    • php中数组下标必须是连续的吗
    • Python 3 教程
      Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
      Python 3 教程
    • Python pip包管理
      一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
      Python pip包管理
    • ubuntu如何重新编译内核
    • 改善Java代码之慎用java动态编译

    目录