返回顶部
首页 > 资讯 > 精选 >怎样理解Java中的多态
  • 590
分享到

怎样理解Java中的多态

2023-06-22 03:06:40 590人浏览 独家记忆
摘要

今天就跟大家聊聊有关怎样理解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中的多态有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注编程网精选频道,感谢大家的支持。

    --结束END--

    本文标题: 怎样理解Java中的多态

    本文链接: https://lsjlt.com/news/302221.html(转载时请注明来源链接)

    有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

    猜你喜欢
    • 怎样理解Java中的多态
      今天就跟大家聊聊有关怎样理解Java中的多态,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。一、多态的概念       继承关系使一个子类能继承...
      99+
      2023-06-22
    • java多态怎么理解
      这篇文章主要介绍java多态怎么理解,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!在java中,多态是同一个行为具有多个不同表现形式或形态的能力;多态就是同一个接口,使用不同的实例而执行不同操作。多态的优点:1、消除...
      99+
      2023-06-14
    • Java多态性怎么理解
      本篇内容主要讲解“Java多态性怎么理解”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Java多态性怎么理解”吧!面向对象编程有三个特征,即封装、继承和多态。封装隐藏了类的内部实现机制,从而可以...
      99+
      2023-06-17
    • Java之理解多态详解
      目录一、多态的概念二、多态的特点三、instanceof操作符四、多态的转型1、向上转型2、向下转型五、方法重写六、小结一、多态的概念        继承关系使一个子类能继承父类的特...
      99+
      2024-04-02
    • 【Java】Java中的多态
      文章目录 一、什么是多态二、多态实现的条件三、重写3.1 什么是重写3.2 重写和重载的区别 四、向上转型和向下转型4.1 向上转型4.2 向下转型 五、多态的优缺点六、避免在构造方法...
      99+
      2023-09-05
      java 开发语言
    • 如何理解Java多态中的动态绑定和静态绑定
      如何理解Java多态中的动态绑定和静态绑定,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。在多态中:成员变量和静态方法编译和运行都看左边;成员方法编译看左边,运行看右边,这是为什...
      99+
      2023-06-02
    • Java中的多态
      一、多态定义及存在条件 1.1 多态的定义 多态是什么? 多态是同一个行为具有不同的表现形式或形态的能力同一方法可以根据发送对象的不同而采用不同的行为方式 例如:打印机分为黑白打印机和彩色打印机,在黑白打印机情况下打出来为黑白,在彩色打印机...
      99+
      2023-08-31
      java
    • 怎样理解动态ip
      怎样理解动态ip,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。通过Modem、ISDN、ADSL、有线宽频、小区宽频等方式上网的计算机,每次上网所分配到的IP地址都不相同,...
      99+
      2023-06-05
    • Java中接口的多态详解
      目录多态参数多态数组接口的多态传递现象总结多态参数 就像我们现实生活中电脑的usb接口,我们既可以接受手机对象,又可以接受相机对象,等等,体现了接口的多态,查看以下代码 接口: pa...
      99+
      2024-04-02
    • java中多态的原理是什么
      今天就跟大家聊聊有关java中多态的原理是什么,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。Java的优点是什么1. 简单,只需理解基本的概念,就可以编写适合于各种情况的应用程序;2...
      99+
      2023-06-14
    • java中多态概念、实现原理详解
      一.什么是多态?1.多态的定义指允许不同类的对象对同一消息做出响应。即同一消息可以根据发送对象的不同而采用多种不同的行为方式(发送消息就是函数调用)2.多态的作用消除类型之间的耦合关系3.多态的说明近代网络小说泛滥,我们可以用它来举一个例子...
      99+
      2023-05-31
      java 多态 ava
    • Java基础:多态的理解与应用
      多态概述多态是继封装、继承之后,面向对象的第三大特性。2.多态现实意义理解:现实事物经常会体现出多种形态,如学生,学生是人的一种,则一个具体的同学张三既是学生也是人,即出现两种形态。Java作为面向对象的语言,同样可以描述一个事物的多种形态...
      99+
      2019-02-14
      java教程 Java
    • Java多态详解
      目录 1. 基本介绍1.1 多态的概念1.2 多态的具体体现1.3 入门案例 2. 多态的转型2.1 向上转型2.2 向下转型2.3 代码示例2.4 转型的异常2.4.1 类型转换异常2....
      99+
      2023-10-03
      java
    • python 多态的理解
      1 class Human(object): # 父类 :创建“人”类 2 3 def __init__(self): 4 5 print('Ill pound the code and...
      99+
      2023-01-30
      多态 python
    • java中多态原理的示例分析
      这篇文章将为大家详细讲解有关java中多态原理的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。Java可以用来干什么Java主要应用于:1. web开发;2. Android开发;3. 客户端开发...
      99+
      2023-06-14
    • java对象实例化过程中的多态特性怎么理解
      本篇内容主要讲解“java对象实例化过程中的多态特性怎么理解”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“java对象实例化过程中的多态特性怎么理解”吧!java 对象实例化过程中的多态特性执行...
      99+
      2023-06-21
    • Java中怎么实现多态
      这篇文章将为大家详细讲解有关Java中怎么实现多态,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。多态多态就是指程序中定义的引用变量所指向的具体类型和通过该引用变量发出的方法调用在编程时并不确...
      99+
      2023-06-20
    • 详解java 中的动态代理
      这期内容当中小编将会给大家带来有关详解java 中的动态代理,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。Java动态代理相关先来看静态代理模式代码:package test; public inter...
      99+
      2023-05-31
      java 动态代理 ava
    • java中实现多态的原理是什么
      什么是多态?多态就是指一个引用变量倒底会指向哪个类的实例对象,该引用变量发出的方法调用到底是哪个类中实现的方法,必须在由程序运行期间才能决定。因为在程序运行时才确定具体的类,这样,不用修改源程序代码,就可以让引用变量绑定到各种不同的类实现上...
      99+
      2020-11-11
      java 实现 多态 原理
    • C#多态性怎么理解
      这篇文章主要讲解了“C#多态性怎么理解”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“C#多态性怎么理解”吧!C#多态性的内涵实际就是通过继承,一个类可以用作多种类型:可以用作它自己的类型、任...
      99+
      2023-06-17
    软考高级职称资格查询
    编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
    • 官方手机版

    • 微信公众号

    • 商务合作