返回顶部
首页 > 资讯 > 精选 >java对象实例化过程中的多态特性怎么理解
  • 785
分享到

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

2023-06-21 23:06:45 785人浏览 八月长安
摘要

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

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

java 对象实例化过程中的多态特性

执行对象实例化过程中遵循多态特性 ==> 调用的方法都是实例化的子类中的重写方法,只有明确调用了super.xxx关键词或者是子类中没有该方法时,才会去调用父类相同的同名方法。

通过案例说明

package com.njau.test1; class Test {    public static void main(String[] args) {        System.out.println(new B().getValue());    }    static class A {        protected int value;        public A (int v) {            setValue(v);        }        public void setValue(int value) {            this.value= value;        }        public int getValue() {            try {                value ++;                return value;            } finally {                this.setValue(value);                System.out.println(value);            }        }    }    static class B extends A {        public B () {            super(5);            setValue(getValue()- 3);        }        public void setValue(int value) {            super.setValue(2 * value);        }    }}

通过上述代码

始终明确调用的方法必须是实例化子类中重写的方法。

首先,在main函数中,【new B()】new了一个B类的实例化对象,在实例化对象时,调用了B类中的构造函数,执行【super(5)】,也就是public A(int v)------>setValue(v),由于调用的方法必须是实例化子类中重写的方法的原则。因此,这里调用的是B类中的setValue(v)方法,此时B实例的value值设置为2 x 5 = 10,后执行super.setValue(10),将value=10的值存储起来。

执行完super(5)后,执行构造函数中的【setValue(getValue()- 3)】中【getValue()】,由于B类中没有getValue()方法,则调用父类(A类)中的getValue()方法,value++所得到的值为11,并存储在value中(先执行finally中的部分,后执行try中的return),在finally中,调用了【this.setValue(value)】,由于调用的方法必须是实例化子类中重写的方法的原则,调用的是B类中的setValue(v)方法,此时B实例的value值设置为2 x 11= 22,之后执行System.out.println(value)

即在控制台上打印22

执行完finally中的部分,后执行try中的return,将value++执行后,存储在value中的11,return回去;执行【setValue(getValue()- 3)】

即:setValue(8)

执行setValue(8)时,由于调用的方法必须是实例化子类中重写的方法的原则,则调用B类中的setValue(v)方法,此时B实例的value值设置为2 x 8= 16;此时B类中的构造函数执行结束。

在实例化对象以后,执行【new B().getValue()】,由于B类中没有getValue()方法,则调用父类(A类)中的getValue()方法,value++所得到的值为17,并存储在value中,在finally中,调用了【this.setValue(value)】,由于调用的方法必须是实例化子类中重写的方法的原则,调用的是B类中的setValue(v)方法,此时B实例的value值设置为2 x 17= 34,之后执行System.out.println(value)

即在控制台上打印34

执行完finally中的部分,后执行try中的return,将value++执行后,存储在value中的17,return回去;执行【System.out.println(new B().getValue())】

即在控制台上打印17

value值的变化过程,仅解释实例化对象时,构造函数中:super(5)与setValue(getValue()+3)两部分。图中两条线,起点分别为【new B()】与【setValue(getValue()+3)】:

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

执行结果为:

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

java对象的三个特性(封装、继承、多态)

类(类型)和对象:对象是独一无二的。对象有其所属之类型。对象是类型的一个具体的实例。

创建编写一个 class :定义一个类型。类型是编写出来的,即使程序不运行,类型已然存在。

对象:对象是new出来的,在程序运行期间new出来的,存在于内存中(堆中 )。如果程序未运行,则对象不存在。

对象的三大特性:

1.封装

1 把本属于某个类型的成员属性(静态特性)和职责(动态特性)定义到一个类中。

2 访问权限控制:使用权限访问修饰符控制成员(属性和方法)的访问(可见性)。

  • private:最小访问权限,仅限类的内部可以访问。

  • <无修饰符>:包修饰符,友好访问修饰符,类内,包内可以访问。

  • protected:类内,包内,子类可以访问。

  • public:类内,包内,子类,包外都可以访问。

类的两大成员:

属性:有默认值,0 0.0 false '\0' null。引用类型的默认值是null值。

方法:方法中,可以访问成员属性。

构造方法:

用于构造对象(对对象进行成员属性初始化),构造对象的过程可能简单,也可能复杂。

  • 和类同名。语法:new 构造方法(参数列表)

  • 无返回值。其作用仅为构造对象。

  • 构造方法可以重载。

this关键字:

  • 访问当前对象的属性和方法。

  • this(参数列表),只能放在构造方法的第一行,并且只能单独使用。

  • 当方法的参数和成员属性名称冲突的时候,可以使用this进行区分。

2.继承

1 为什么要继承:消除重复。子类可以继承父类的某些成员。

2 extends 关键字:扩展。一个类只能继承一个父类。如果没有指定父类的话,则默认继承自Object类。Object类是根类型,终级类,没有父类。其它一切引用类型都是直接或间接继承自Object类型。

3 什么成员可以被继承?1. 私有成员不能被继承。2. 构造方法不能被继承。

4 子类对象构造的过程:按照继承的顺序,递归创建各类型的状态值。

3.多态

同一个类型所展现出的行为或属性的多种形态。

使用父类(祖先类、接口)的引用指向子类(派生类,实现类)的对象。

多态的使用场景:某些场景,只希望关注某些(不同的具体类型)类型的共性(祖先类,接口),而忽略其它独特的特性。

final:

  • 修饰类,表示类不可被继承。

  • 修饰方法,表示方法不能被重写。

  • 修饰成员属性,或者普通变量,表示值不可修改。

static:静态的

  • 一旦属性和方法,添加了static关键字,表示属性和方法是属于类的,而不是属于某一个具体的对象的。

  • 通过“类名.静态成员”来访问,而无须先创建对象。

抽象类:

  • 当定义一个类时,如果某个方法暂时不便实现,或者无法实现,或者不适合实现,或者希望具体的子类来提供实现,可以使用abstract关键字来修饰此方法,表示抽象方法,抽象方法无需提供实现。

  • 当一个类中存在抽象方法时,类必须定义成抽象类。但是,一个抽象类中可以没有抽象方法。

  • 抽象类不能实例化,但可以定义构造方法。

  • 抽象类是类,拥有一切类的特性,除了不能实例化。

接口:

  • 接口不是类。但是接口和抽象类类似。

  • 接口中的方法全都是公有的抽象方法。jdk8之前。

  • 接口中的属性,都是公有的静态的最终的。

  • 接口需要类来提供实现。implements关键字。一个类可以实现多个接口,相当于将所有这些接口的方法提供实现。

  • 接口可以继承接口,使用 extends 关键字。

  • 接口也可以使用多态特性,使用接口的引用指向实现类的实例。

  • 接口的主要目的(作用)就是多态。

到此,相信大家对“java对象实例化过程中的多态特性怎么理解”有了更深的了解,不妨来实际操作一番吧!这里是编程网网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

--结束END--

本文标题: java对象实例化过程中的多态特性怎么理解

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

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

猜你喜欢
  • java对象实例化过程中的多态特性怎么理解
    本篇内容主要讲解“java对象实例化过程中的多态特性怎么理解”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“java对象实例化过程中的多态特性怎么理解”吧!java 对象实例化过程中的多态特性执行...
    99+
    2023-06-21
  • java 对象实例化过程中的多态特性解析
    目录java 对象实例化过程中的多态特性通过案例说明通过上述代码java对象的三个特性(封装、继承、多态)1.封装2.继承3.多态java 对象实例化过程中的多态特性 执行对象实例化...
    99+
    2024-04-02
  • 怎么理解Java面向对象三大特性
    这篇文章主要讲解了“怎么理解Java面向对象三大特性”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么理解Java面向对象三大特性”吧!继承Java中的继承只能单继承,但是可以通过内部类继承...
    99+
    2023-06-02
  • Java面向对象编程的多态怎么实现
    本文小编为大家详细介绍“Java面向对象编程的多态怎么实现”,内容详细,步骤清晰,细节处理妥当,希望这篇“Java面向对象编程的多态怎么实现”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。Java面向对象编程之多态...
    99+
    2023-06-26
  • 怎么理解javascript基于对象的特性
    JavaScript是一门基于对象的编程语言。它充分利用了面向对象编程(OOP)的思想和原则。通过这种方式,它将代码组织成易于理解和重用的块,进一步提高了开发人员的效率。在这篇文章中,我们将探讨如何理解JavaScript的基于对象的特性。...
    99+
    2023-05-14
  • Java面向对象编程(封装/继承/多态)实例解析
    本文主要介绍了面向对象的三大特征实例解析,下面看看具体内容。封装封装一个Teacher和Student类package com.hz.test;public class Teacher { private String name; pr...
    99+
    2023-05-30
    java 面向对象 ava
  • 如何理解javascript中的实例化对象
    本篇内容介绍了“如何理解javascript中的实例化对象”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成! ...
    99+
    2024-04-02
  • Java中实例初始化和静态初始化的过程详解
    目录一、实例初始化1.1 实例初始化过程1.2 实例初始化的顺序1.3 实例初始化的注意事项二、静态初始化2.1 静态初始化过程2.2 静态初始化的顺序2.3 静态初始化的注意事项三...
    99+
    2023-05-18
    Java实例初始化和静态初始化 Java实例初始化 Java静态初始化 Java初始化
  • Java中对象的序列化详解及实例
     Java中对象的序列化详解及实例把java对象转化为字节序列的过程称为对象的序列化。把字节序列恢复为java对象的过程称为对象的反序列化。对象序列化的用途:把对象的字节序列永久的保存到硬盘上,通常存放在一个文件中2.在网络上传送...
    99+
    2023-05-31
    java 序列化 中对
  • 详解Java面向对象之多态的原理与实现
    目录何为多态代码实现多态理解何为多态 定义: 多态是指不同的子类在继承父类后分别都重写覆盖了父类的方法,即父类同一个方法,在继承的子类中表现出不同的形式。系统在运行时(而非编译时),...
    99+
    2024-04-02
  • 怎么在java中利用反射实例化对象
    怎么在java中利用反射实例化对象?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。Java是什么Java是一门面向对象编程语言,可以编写桌面应用程序、Web应用程序、分布式系...
    99+
    2023-06-14
  • golang函数在面向对象编程中的多态性实现
    在 go 语言中,函数可以作为接口值存储,从而实现多态性:定义接口,规定一组方法签名。创建实现接口的类型,并为其实现这些方法。定义一个函数,接受接口值作为输入。函数中仅使用接口值的方法,...
    99+
    2024-05-04
    面向对象编程 多态性 golang
  • 怎么理解java图的对象化描述
    这篇文章主要讲解了“怎么理解java图的对象化描述”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么理解java图的对象化描述”吧!一、前言对于图来说,我一直以来都似懂非懂懂的是图的含义,不...
    99+
    2023-06-25
  • Java中如何使用对象数组实现接口的多态性?
    Java中的多态性是面向对象编程中的一个重要概念,它允许不同的对象通过同一个接口来实现不同的行为。在Java中,我们可以使用对象数组来实现接口的多态性,下面我们将详细介绍这个过程。 首先,我们需要定义一个接口,以便我们可以在不同的类中实现它...
    99+
    2023-11-09
    接口 对象 数组
  • Java面向对象之多态的原理是什么与怎么实现
    本文小编为大家详细介绍“Java面向对象之多态的原理是什么与怎么实现”,内容详细,步骤清晰,细节处理妥当,希望这篇“Java面向对象之多态的原理是什么与怎么实现”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。何为多...
    99+
    2023-06-30
  • Java实例化对象添加属性的方法是什么
    Java实例化对象添加属性的方法是通过调用对象的setter方法来设置属性的值。setter方法是对象的一个公共方法,通常命名为se...
    99+
    2023-09-26
    Java
  • Java编程中的面向对象怎么理解
    本篇内容主要讲解“Java编程中的面向对象怎么理解”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Java编程中的面向对象怎么理解”吧!许多人刚刚学完现在看来是快要淘汰的只是面向过程的语言。他们的...
    99+
    2023-06-17
  • Java中怎么通过创建对象来提升程序性能
    本篇文章给大家分享的是有关Java中怎么通过创建对象来提升程序性能,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。在 Java 中有多种方式可以创建对象,总结起来主要有下面的 4...
    99+
    2023-06-16
  • 怎么在Java中实现实体对象的三种状态
    怎么在Java中实现实体对象的三种状态?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。Java可以用来干什么Java主要应用于:1. web开发;2. Android开发;3. ...
    99+
    2023-05-30
    java
  • Java怎么实现多线程中的静态代理模式
    这篇文章将为大家详细讲解有关Java怎么实现多线程中的静态代理模式,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。前言代理模式是一种设计模式,提供了对目标对象额外的访问方式,即通过代理对象访问目标对象,这样...
    99+
    2023-06-15
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作