首页 > 编程语言 >java 继承(中)

java 继承(中)

时间:2024-03-20 18:32:05浏览次数:24  
标签:java Zi 构造方法 继承 age super public Fu

前面我们已经说明了什么是继承?继承的好处弊端等,不清楚的可参照链接 java 继承(上)-CSDN博客

本篇文章主要理解super和this的区别及联系。

1、super

本章节主要说明怎么访问方法内的变量,类内的成员变量,父类的成员变量,下面先看代码实现。

1.1 代码实现

(1)Fu类的代码实现

public class Fu {
    int age = 40;
}

(2)Zi类的代码实现

public class Zi extends Fu{
    public int age = 30;;
    public void method(){
        int age = 20;
        //访问方法内的局部变量 age
        System.out.println(age);
        //访问本类的成员变量 age
        System.out.println(this.age);
        //访问父类的成员变量 age
        System.out.println(super.age);
    }
}

(3)Test类的代码实现

public class Test {
    public static void main(String[] args) {
        Zi z = new Zi();
        z.method();
    }
}

(4)运行结果

1.2 super总结

(1)super 关键字的用法和 this 关键字的用法相似

  • this:代表本类对象的引用;
  • super:代表父类存储空间的标识,也可以理解为父类对象引用。

(2)super和this的区别

关键字

访问成员变量

访问构造方法

访问成员方法

this

this.成员变量

访问本类成员变量

this(...)

访问本类构造方法

this.成员方法(...)

访问本类成员方法

super

super.成员变量

访问父类成员变量

super(...)

访问父类构造方法

super.成员方法(...)

访问父类成员方法

说明:this关键字指向调用该方法的对象,一般我们是在当前类中使用this关键字,所以我们常说this代表本类对象的引用。

2、super内存图分析

2.1 代码实现

(1)Fu类的代码实现

public class Fu {
    public int age = 40;
    public Fu() {
        System.out.println("父类的无参构造方法被调用。。");

    }
    public void method() {
        System.out.println("父类的method方法被调用。。");
    }
}

(2)Zi类的代码实现

public class Zi extends Fu{
    int age = 30;
     public Zi(){
         System.out.println("子类中无参构造方法被调用。。");
     }
     public void show(){
         int age =20;
         System.out.println(age);
         System.out.println(this.age);
         System.out.println(super.age);
     }
}

(3)Test类的代码实现

public class Test {
    public static void main(String[] args) {
        Zi z = new Zi();
        z.show();
        z.method();
    }
}

(4)运行结果

2.2 内存图分析

(1)执行Zi z = new Zi();

(2)其实上面的Zi z = new Zi(); 没有执行完,new Zi()的时候它会去调用Zi类的构造方法,所以,Zi类的构造方法进栈;

(3)上面的Zi z = new Zi(); 还是没有执行完,Zi类构造方法的第一条语句如果没有特别写出的话,它会默认调用父类的构造方法,也就是说,它默认有个super(),即下面的语句是相同的。

(4)所以,它会找到Fu类的构造方法;

(5)然后,看下父类里面的东西有没有需要初始化的成员变量,发现存在成员变量age,所以它会进行初始化,并把Fu的构造方法加载到栈内存中。

(6)开始执行Fu类构造方法的内容。

(7)Fu类构造方法执行完,出栈,然后Zi类的构造方法继续往下执行。

(8)Zi类构造方法执行完,出栈,然后Zi z = new Zi(); 执行完毕。开始执行z.show();方法,show方法进栈。

(9)直接输出局部变量age的值。

(10)由于有this调用,所以直接输出Zi类成员变量age的值。

(11)由于super调用,所以直接输出Fu类成员变量age的值。

(12)show方法执行完,出栈,执行z.method(); 由于在Zi类中没有该方法,所以它会去Fu类中去找,Fu类中有,所以method();进栈,本篇文章不做讲解,可自行画出。


 

本文为学习笔记,所参考文章均已附上链接,若有疑问请私信!

创作不易,如果对你有点帮助的话麻烦点个赞支持一下!

新手小白,欢迎留言指正!

标签:java,Zi,构造方法,继承,age,super,public,Fu
From: https://blog.csdn.net/m0_59748326/article/details/136885108

相关文章

  • 提升Java编程安全性-代码加密混淆工具的重要性和应用
     在Java编程领域中,保护代码安全性和知识产权至关重要。本文旨在探讨代码加密混淆工具在提升代码安全性和保护知识产权方面的重要性。我们将介绍几款流行的Java代码加密混淆工具,如ProGuard、DexGuard、Jscrambler、DashO和ipaguard,并分析它们的功能和适用场景,旨在帮助开发者选择......
  • 卡码java基础课 | 16.出现频率最高的字母
    学习内容:哈希表:数组重点归纳:哈希表:根据关键码key的值而直接进行访问的数据结构。重点是哈希函数(散列函数),是一种对应关系f,根据关键字找到对应存储位置。大致分为3种,数组、set集合、map映射。本节主要学习数组作为哈希表的使用。例题:解:点击查看代码importjava.util.Scan......
  • Java中常见字符串拼接九种方式
    一、前言在Java编程中,字符串拼接是一项非常基础的操作,它涉及到了很多日常开发工作中常见的场景,例如拼接SQL语句、构建HTTP请求参数等等。因此,对于掌握好字符串拼接技巧不仅有助于提高代码效率,而且能够避免一些潜在的性能问题。下面我们就来列举出来几种方式,搭配例子!二......
  • JavaScript逆向之代码补环境(以iwencai为例)
    知识点1.浏览器环境与Node环境的区别1.1浏览器环境具有的功能页面渲染功能(1)加载和控制页面元素的能力->在js中由dom对象来完成(2)渲染引擎->和我们基本上无关浏览器本身的一些东西(窗口大小,url)->BOM对象能够执行js的能力->v8引擎负责执行js代码1.2Node环......
  • Java实现后端分页
    分页操作在开发中可以说是最基本的操作,特别是在做各种后台管理系统的时候,不可能一次性查询一千条、一万条数据。这时候就需要进行分页操作。那么在Java后端当中是如何实现分页的呢?下面就来聊一聊Java后端分页。Java分页原理首先说说分页的原理。有几个名词需要解释一下......
  • Java CC链全分析
    CC链全称CommonsCollections(Java常用的一个库)梦的开始CC1环境部署JDK版本:jdk8u65Maven依赖:<dependencies><!--https://mvnrepository.com/artifact/junit/junit--><dependency><groupId>junit</groupId><......
  • Java学习笔记——第二十一天
    网络编程概述网络编程是可以让设备中的程序与网络上其他设备中的程序实现数据交互的编程技术(实现网络通信的)。Java提供了哪些网络编程的包java.net.*包下提供了网络编程的解决方案。基本的通信架构基本的通信架构有2种形式:CS架构(Client客户端/Server服务端)、BS架构(Brow......
  • JavaScript 系列教程 II JavaScript 基础知识
    ......
  • 【Java】11k star,一个强大的 Java 版爬虫框架,几行代码即可实现一个爬虫
    From: https://mp.weixin.qq.com/s/rQf4bmHlSucAUlQy7jPNiQwebmagic是一个无须配置、便于二次开发的爬虫框架,它提供简单灵活的API,只需少量代码即可实现一个爬虫。本项目在GitHub上有11.1KStar,非常热门,让不熟悉爬虫的小白也可以玩转爬虫。“申明:此教程仅供爬虫学习交流使用......
  • JavaScript 模块化
    JavaScript模块化JavaScript的历史问题背景JavaScript在一开始诞生的时候只是用来网页脚本的开发,其实没有模块化和命名空间的概念。JS的模块化需求日益增长。幼年期:无模块化模块化思维的萌芽。需要在页面中加载不同的js:动画库,表单库,格式化工具多种js文件被......