返回顶部
首页 > 资讯 > 后端开发 > Python >java 对象实例化过程中的多态特性解析
  • 721
分享到

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

2024-04-02 19:04:59 721人浏览 安东尼

Python 官方文档:入门教程 => 点击学习

摘要

目录java 对象实例化过程中的多态特性通过案例说明通过上述代码java对象的三个特性(封装、继承、多态)1.封装2.继承3.多态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对象的三个特性(封装、继承、多态)

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

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

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

对象的三大特性:

1.封装

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

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

  • private:最小访问权限,仅限类的内部可以访问。
  • <无修饰符>:包修饰符,友好访问修饰符,类内,包内可以访问。
  • protected:类内,包内,子类可以访问。
  • public:类内,包内,子类,包外都可以访问。

类的两大成员:

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

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

构造方法:

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

  • 和类同名。语法:new 构造方法(参数列表)
  • 无返回值。其作用仅为构造对象。
  • 构造方法可以重载。

this关键字:

  • 访问当前对象的属性和方法。
  • this(参数列表),只能放在构造方法的第一行,并且只能单独使用。
  • 当方法的参数和成员属性名称冲突的时候,可以使用this进行区分。

2.继承

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

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

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

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

3.多态

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

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

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

final:

  • 修饰类,表示类不可被继承。
  • 修饰方法,表示方法不能被重写。
  • 修饰成员属性,或者普通变量,表示值不可修改。

static:静态的

  • 一旦属性和方法,添加了static关键字,表示属性和方法是属于类的,而不是属于某一个具体的对象的。
  • 通过“类名.静态成员”来访问,而无须先创建对象。

抽象类:

  • 当定义一个类时,如果某个方法暂时不便实现,或者无法实现,或者不适合实现,或者希望具体的子类来提供实现,可以使用abstract关键字来修饰此方法,表示抽象方法,抽象方法无需提供实现。
  • 当一个类中存在抽象方法时,类必须定义成抽象类。但是,一个抽象类中可以没有抽象方法。
  • 抽象类不能实例化,但可以定义构造方法。
  • 抽象类是类,拥有一切类的特性,除了不能实例化。

接口:

  • 接口不是类。但是接口和抽象类类似。
  • 接口中的方法全都是公有的抽象方法。jdk8之前。
  • 接口中的属性,都是公有的静态的最终的。
  • 接口需要类来提供实现。implements关键字。一个类可以实现多个接口,相当于将所有这些接口的方法提供实现。
  • 接口可以继承接口,使用 extends 关键字。
  • 接口也可以使用多态特性,使用接口的引用指向实现类的实例。
  • 接口的主要目的(作用)就是多态。

以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程网。

--结束END--

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

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

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

猜你喜欢
  • java 对象实例化过程中的多态特性解析
    目录java 对象实例化过程中的多态特性通过案例说明通过上述代码java对象的三个特性(封装、继承、多态)1.封装2.继承3.多态java 对象实例化过程中的多态特性 执行对象实例化...
    99+
    2024-04-02
  • java对象实例化过程中的多态特性怎么理解
    本篇内容主要讲解“java对象实例化过程中的多态特性怎么理解”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“java对象实例化过程中的多态特性怎么理解”吧!java 对象实例化过程中的多态特性执行...
    99+
    2023-06-21
  • Java面向对象之多态实例分析
    这篇文章主要介绍“Java面向对象之多态实例分析”,在日常操作中,相信很多人在Java面向对象之多态实例分析问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Java面向对象之多态实例分析”的疑惑有所帮助!接下来...
    99+
    2023-06-30
  • Java面向对象编程(封装/继承/多态)实例解析
    本文主要介绍了面向对象的三大特征实例解析,下面看看具体内容。封装封装一个Teacher和Student类package com.hz.test;public class Teacher { private String name; pr...
    99+
    2023-05-30
    java 面向对象 ava
  • Java类和对象初始化过程的示例分析
    这篇文章主要介绍了Java类和对象初始化过程的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。  问题引入  近日我在调试一个枚举类型的解析器程序,该解析器是将数据库内...
    99+
    2023-06-03
  • Java面向对象之多态的示例分析
    这篇文章主要介绍Java面向对象之多态的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!public class Polymorphism {public static&...
    99+
    2023-06-02
  • 如何解析Java语言的对象克隆特性
    这篇文章将为大家详细讲解有关如何解析Java语言的对象克隆特性,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。在Java中传值及引伸深度克隆的思考中,我们讲过引申到克隆技术Java中的所有对象...
    99+
    2023-06-17
  • 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对象的XML序列化与反序列化实例解析
    上一篇文章我们介绍了java实现的各种排序算法代码示例,本文我们看看Java对象的xml序列化与反序列化的相关内容,具体如下。XML是一种标准的数据交换规范,可以方便地用于在应用之间交换各类数据。如果能在Java对象和XML文档之间建立某种...
    99+
    2023-05-30
    java xml 序列化
  • JavaScript对象特性与实践应用的示例分析
    小编给大家分享一下JavaScript对象特性与实践应用的示例分析,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!JavaScript 的简单数据类型是数字、字符串、布尔值(true/fal...
    99+
    2024-04-02
  • golang函数在面向对象编程中的多态性实现
    在 go 语言中,函数可以作为接口值存储,从而实现多态性:定义接口,规定一组方法签名。创建实现接口的类型,并为其实现这些方法。定义一个函数,接受接口值作为输入。函数中仅使用接口值的方法,...
    99+
    2024-05-04
    面向对象编程 多态性 golang
  • Json转化为Java对象的实例详解
    Json转化为Java对象的实例详解问题:前后端数据交互时,经常会遇到Json串与Java对象转化的问题,有的Java对象中还包含了List对象等。解决方案: 引入 json-lib包,Maven坐标如下:<dependency>...
    99+
    2023-05-31
    json java对象 ava
  • Java中如何使用对象数组实现接口的多态性?
    Java中的多态性是面向对象编程中的一个重要概念,它允许不同的对象通过同一个接口来实现不同的行为。在Java中,我们可以使用对象数组来实现接口的多态性,下面我们将详细介绍这个过程。 首先,我们需要定义一个接口,以便我们可以在不同的类中实现它...
    99+
    2023-11-09
    接口 对象 数组
  • Java面向对象编程的多态怎么实现
    本文小编为大家详细介绍“Java面向对象编程的多态怎么实现”,内容详细,步骤清晰,细节处理妥当,希望这篇“Java面向对象编程的多态怎么实现”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。Java面向对象编程之多态...
    99+
    2023-06-26
  • HTML5新特性中多线程的示例分析
    这篇文章给大家分享的是有关HTML5新特性中多线程的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。一、Worker类  1、方法介绍  (1)构造函数 new Worke...
    99+
    2024-04-02
  • 详解Java面向对象中的继承与多态
    详解Java面向对象中的继承与多态?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。Java 继承与多态的深入理解1、  什么是继承,继承的特点?子类继承父类的特征和...
    99+
    2023-05-31
    java 面向对象 ava
  • 如何通过实例学习Java对象的构造过程
    这篇文章给大家介绍如何通过实例学习Java对象的构造过程,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。下面提供一个项目中的错误实例,提供对其观察和分析,揭示出Java语言实例化一个对象具体过程,最后总结出设计Java类...
    99+
    2023-06-03
  • Java面向对象编程之继承和多态以及包的解析与使用范例
    目录1.继承1.1继承的基本使用1.2 protected 关键字1.3 final 关键字2.多态2.1向上转型2.2动态绑定2.3方法重写2.4向下转型2.5super 关键字2...
    99+
    2024-04-02
  • 深入浅析java中面向对象的继承和多态
    深入浅析java中面向对象的继承和多态?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。继承和多态一.this super关键字this: 可以在构造器中的第一代码中...
    99+
    2023-05-31
    java 继承 多态
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作