Java基础:第四十一讲 this和super

FPGA新手必看:Create HDL Wrapper和Generating Output Products到底该先用哪个? 本文深入解析了FPGA设计中Create HDL Wrapper与Generating Output Products的正确使用顺序,帮助新手避免常见错误。详细介绍了两者的功能差异、执行顺序的底层逻辑以及工程管理的最佳实践,特别适合使用Vivado进行FPGA开发的初学者。 阅读详情

 

this 和 super 是 Java 中的两个比较特殊的关键字。 this 表示当前对象,而 super 表示父类对象,严格来说应该是子类从父类继承过来的部分,包括继承过来的成员变量和成员方法。这两个关键字用于 Java 类中自己的方法来访问自己的成员变量和自己的成员方法。本次内容介绍如何使用 this 和 super ,主要内容如下:
l  正常情况下如何访问成员变量和成员方法
l  什么时候需要使用 this 访问成员和成员方法
l  什么时候需要使用 super 访问变量和成员方法
l  如何使用 this 访问其他的构造方法
l  如何使用 super 访问父类的构造方法
下面分别介绍。
1 正常情况下如何访问成员变量和成员方法
正常情况下,访问某个对象的方法和属性,通过“对象名 . 属性名”或者“对象名 . 方法名”访问成员变量和成员方法。
例:
String name;
System.out.println(name.length());
 
如果是类自己的方法访问成员变量和成员方法,可以采用如下的方式( setName 方法中的代码)。
例:
package thisAndSuper;
 
public class Animal {
    protected String id ;
    protected String name ;
    public void setName(String newname){
       // 正常情况下,应该这样访问成员变量和成员方法
       name = newname;
       print( " 初始化名字 " );
    }
    public void print(String message){
       System. out .println( "Animal--------" +message);
    }
}
这里再访问 name 属性和 print 方法的时候为什么没有给出对象名呢?因为在编写类的时候不知道对象的名字,因为对象在运行之后才会产生。
Name 属性和 print 方法应该属于哪个对象呢?应该是当前方法( setName )所属的对象,为了表示这个对象, Java 中提供了 this 关键字用来表示当前对象。可以通过 this 访问所有的成员变量和成员方法。
2 什么时候需要使用this访问成员和成员方法
上面的代码中没有使用 this 访问 name 属性和 print 方法,实际上可以通过 this 访问,上面的 setName 方法可以写成下面的形式。
例:
    public void setName(String newname){
       this. name = newname;
       this.print( " 初始化名字 " );
    }
什么时候必须用 this 呢?
当局部变量与成员变量重名的时候必须使用 this 。例如,类中有成员变量 id ,而方法的参数中也有变量 id 。看下面的代码。
例:
         public Animal(String id){
                   this.id = id;
         }
如果直接写成 id=id ,赋值过程无效。
3 什么时候需要使用super访问变量和成员方法
super 表示从父类继承来的成员变量和成员方法, this 可以用来访问所有的成员变量和成员方法,包括从父类继承过来的成员变量和成员方法。什么时候必须使用 super 呢?
 
如果父类和子类有同名成员变量或成员方法,默认情况下访问的是子类的,如果希望访问从父类继承的成员,则必须通过 super 这种方式访问从父类继承过来的成员变量。
 
例:
         public void setParentName(String name){
                   // 调用从父类继承过来的成员变量,如果父类和子类有同名成员变量,则必须通过这种方式访问从父类继承过来的成员变量
                   // super.name = name;
                   // 调用从父类继承过来的成员变量,父类中定义的私有的成员变量和方法是不能访问的
                   super.setName(name);
                  
                   this.print("设置从父类继承过来的成员!");
         }
4 如何使用this访问其他的构造方法
this 还可以用来访问自己的构造方法。用法与调用其它方法不同。下面的代码展示了用法。
例:
         public Animal(String id,String name){
                   // 调用自己的构造方法,必须放在方法中的第一行
                   this(id);
                   this.name = name;
         }
注意:使用 this 调用自己的构造方法,必须放在构造方法中,并且必须是构造方法的第一行有效代码。
5 如何使用super访问父类的构造方法
要访问父类的构造方法需要使用 super ,用法与使用 this 访问自己的构造方法相似。
例:
         public Dog(String id){
                   // 调用父类的构造方法
                   super(id);
         }
         public Dog(String id,String name){
                   // 调用父类的构造方法,必须放在方法中的第一行
                   super(id);
                   this.name = name;
         }
注意:必须放在构造方法中,并且必须是构造方法中的第一行有效代码。
另外需要注意:必须调用父类构造方法,如果不写,系统会自动调用父类的无参数构造方法。如果父类没有参数构造方法,就会出错。
看看下面的代码会报什么错?
public class Animal{
   protected String id;
   public Animal(Stirng id){
      this.id = id;
   }
}
 
public class Dog extends Animal{
   protected String name;
   public Dog(String name){
      this.name = name;
   }
}
 
下面的例子展示了 this 和 super 的用法。
package thisAndSuper;
 
public class Animal {
         protected String id;
         protected String name;
         public void setName(String newname){
                   // 正常情况下,应该这样访问成员变量和成员方法
                   name = newname;
                   print("初始化名字");
         }
         public Animal(String id){
                   this.id = id;
         }
         public Animal(String id,String name){
                   // 调用自己的构造方法,必须放在方法中的第一行
                   this(id);
                   this.name = name;
         }
         public void print(String message){
                   System.out.println("Animal--------"+message);
         }
}
 
package thisAndSuper;
 
public class Dog extends Animal{
         public String name;
         public String x;
         public void setName(String name){
                   // 调用自己的成员变量,或者从父类继承过来的成员变量
                   this.name = name;
                   // 调用从父类继承过来的成员方法,也可以使用this.print("设置子类成员");
                   super.print("设置子类成员"); //this.print("设置子类成员");
         }
         public void setParentName(String name){
                   // 调用从父类继承过来的成员变量,如果父类和子类有同名成员变量,则必须通过这种方式访问从父类继承过来的成员变量
                   // super.name = name;
                   // 调用从父类继承过来的成员变量,父类中定义的私有的成员变量和方法是不能访问的
                   super.setName(name);
                  
                   this.print("设置从父类继承过来的成员!");
         }
         public Dog(String id){
                   // 调用父类的构造方法
                   super(id);
         }
         public Dog(String id,String name){
                   // 调用父类的构造方法,必须放在方法中的第一行
                   super(id);
                   this.name = name;
         }
         public void print(String message){
                   System.out.println("Dog--------"+message);
         }
 
}
 
下一次:
李绪成 优快云 Blog: http://blog.youkuaiyun.com/javaeeteacher
编写一个程序实现顺序表的各种基本运算(假设顺序表的元数基本类型为Char) /* *Copyright (c) 2016, 烟台大学计算机学院 *All rights reserved. *文件名称:main.cpp *作者:张旺华 *完成日期: 2016 年 7 月 1 日 *版本号:v1.0 *问题描述:编写一个程序实现顺序表的各种基本运算(假设顺序表的元数基本类型为Char) * */ #include #include #include 阅读详情

相关推荐

JSSIP实战:5分钟搞定WebRTC电话功能(附完整代码示例)

本文通过JSSIP库实战演示如何在Web应用中快速集成WebRTC电话功能。文章提供了从环境准备、SIP服务器连接到完整代码示例的详细步骤,涵盖用户注册、拨号接听、媒体流处理等核心环节,并针对常见问题给出排查方案,帮助开发者高效实现网页端实时语音通信。

u8v9w0x1y的博客 518

必须得说一下,子类关于从父类继承过来的private成员这点事儿

我个人认为学习编程,从面向过程到面向对象的思想转变是个很重要的过程,然而对于类的深入了解是这思想的基础。 今天便记录一下对子类关于从父类继承过来的private成员这点事儿 直入主题 子类从父类那里继承过来的私有成员和方法是不能够被子类调用的,在网上查看发现,其实说父类的private成员是不能被继承给子类的,这一说法是不正确的,意思是父类的private确实是继承给了子类,但是子类不能够

JohnWang的专栏 2514

STM32通过ESP8266连接机智云APP(第二讲,烧录固件并测试)

今天与大家分享STM32通过ESP8266连接机智云APP,并完成数据的上传下发第二讲。带大家一起烧录机智云固件到ESP8266并且将其通过机智云串口助手与APP进行测试。

qq_63267523的博客 1425

重新认识java(五) ---- 面向对象之多态(向上转型与向下转型)

多态,大概每个人都知道。但是,又有几个人真的理解什么是多态、多态有哪些细节呢?如果你看到这篇文章的名字,脑海中对多态没有一个清晰的概念,不妨点进来看看,也许会有收获。

mystery的博客 6万+

告别F5失灵!手把手教你为Cursor配置.Net Core控制台项目专属调试环境

本文详细指导如何在Cursor编辑器中为.Net Core控制台项目配置专属调试环境,解决F5失灵等常见问题。从调试器选择到launch.json配置,再到高级调试技巧,帮助开发者高效搭建完整的调试工具链,提升开发效率。

weixin_28834765的博客 288

SARScape实战:集成GACOS数据优化InSAR大气校正全流程

本文详细介绍了如何在SARScape软件中集成GACOS数据,以优化InSAR大气校正的全流程。通过实战步骤,从GACOS数据申请、下载、导入,到在单景干涉图和SBAS-InSAR流程中应用,有效剥离大气相位延迟,显著提升形变监测结果的精度与可靠性,实现从“雾里看花”到“拨云见日”的转变。

weixin_28419039的博客 402

java中的向上转型(对象的多态)与向下转型

1.向上转型(对象的多态) 向上转型就是将父类的对象引用指向子类对象。 或者是叫做把子类对象赋给父类的引用。 即: Father father = new Children; 2.向下转型 向下转型往往会出现ClassCastException异常。 所以得先使用 instanceof 判断一下是否是对象类型一致。 Father father = new Children; if(father instanceof Childen){ Children c = (Children) father

qq_45256805的博客 287

Qwen3-Omni-30B-A3B-Instruct微调指南:如何打造专属智能博物官(附数据集)

本文详细介绍了如何对Qwen3-Omni-30B-A3B-Instruct模型进行微调,以打造专业的智能博物官。指南涵盖了从理解模型架构优势、构建高质量文博数据集,到使用LLaMA-Factory进行实战微调、效果评估与部署优化的完整流程,并提供了关键的环境配置与性能优化建议,帮助开发者在垂直领域高效定制专属AI助手。

weixin_29096377的博客 1144

java抽象类+继承+super用法和this异同

抽象类 抽象类顾名思义也是类,其命名也暗示它是在类的基础上加以限制(加强条件)而来 1 定义限制 至少含有一个抽象方法,其余属性,方法皆与普通类一致 抽象方法是用abstract声明的方法,无方法体,专门用来给子类继承 2 使用限制 抽象类无法直接实例化对象,但可通过对象多态实例化,如子类对象向上转型 子类继承抽象类时,必须实现所有抽象方法 super拿来干啥?? 这个结合代码将比...

努力做个书呆儿 2699

win2016 php mysql_Windows Server 2016 IIS10.0+PHP(FastCGI)+MySQL环境搭建教程 | 系统运维...

准备篇一、环境说明:操作系统:Windows Server 2016PHP版本:php 7.1.0MySQL版本:MySQL 5.7.17.0二、相关软件下载:1、PHP下载地址:2、MySQL下载地址:3、Microsoft Visual C++ 2010 可再发行组件包(安装MySQL需要此插件)4、Visual C++ Redistributable for Visual Studio 20...

weixin_34794420的博客 1378

AI爬虫:一文讲通AI爬虫技术和原理,及34个AI爬虫工具推荐

AI 爬虫 是一种结合了传统网络爬虫技术和人工智能(AI)技术的工具,能够更智能、高效地从网页中提取和处理数据。与传统爬虫相比,AI 爬虫能够更好地处理动态内容、复杂网页结构以及非结构化数据,同时具备数据清洗、分类、情感分析等高级功能。

数据知道的博客 1万+

Java基础——this和super关键字

this和super关键字的对比学习,能更好的加深理解。

shouyeren_st的博客 1794

AI工具赋能日常工作的实践指南:以产品经理与程序员为例

AI工具赋能日常工作的实践指南:以产品经理与程序员为例

专注于编程、AI、人工智能等多个领域内容研究和分析 593

Java中super和this关键字的使用

在使用super和this关键字时, 以下描述正确的是() A. 在子类构造方法中使用super()显示调用父类的构造方法, super()必须写在子类构造方法的第一行, 否自编译不通过 B. super() 和 this() 不一定要放在构造方法内的第一行 C. this() 和 super() 可以同时出现在一个构造函数中 D. this() 和 super() 可以在static 环境中使用...

weixin_43235210的博客 5987

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

详解:this和super的区别

作用对象this引用当前对象,super引用当前对象的直接父类。用途this主要用于解决成员变量与局部变量名冲突、调用另一个构造器、返回当前对象的引用;super主要用于访问父类的成员(字段和方法)、调用父类的构造器。使用场景this通常用于当前类内部,super通常用于子类内部访问父类。在继承关系的条件下,如果子类没有和父类一样的非私有属性和方法(访问修饰是默认、protected或public的),子类可以通过this或super调用父类的属性和方法。

阿鹏的博客 1521

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

Java 中 this 和 super 的用法详解

这两个关键字的用法,作为一名Java程序员,我觉得基础是最重要的,因为它决定了我们的上限,所以我的文章大部分还是以分享Java基础知识为主,学好基础,后面的知识我想学起来就变得简单。通过打印结果看到我们在创建子类对象的时候,首先调用了父类的构造方法,接着调用子类的构造方法,也就是说在创建子类对象的时候,首先创建了父类对象,与前面我们猜想的一致。,那说明我们使用的时候只能在子类中使用,既然是对象的引用,那么我们也可以用来调用成员属性以及成员方法,当然了,这里的 super 关键字还能够调用父类的构造方法。

初念初恋的博客 3831

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

Java中this和super的用法

一、this的用法 构造方法是创建java对象的重要途径,通过new关键字调用构造器时,构造器返回该类的对象,但是这个对象并不是完全由构造器负责创建,创建一个对虾对象分为如下四步: 分配对象空间,并将对象成员变量初始化为0或者null 执行属性值的显示初始化 执行构造方法 返回对象的地址给相关变量 this的本质就是“创建好的对象的地址”,由于在构造方法调用之前,对象已经创建。因此,在构造方法中也可以使用this代表“当前对象”。 书上对于this的描述: this表示一个对象的引用,它指向正在执行方

1669

this和super理解

this跟instanceof都是判断——引用指向的类型instanceof关键字判断——引用所指向的对象是否属于某个类,这个和引用本身的类型是没有关系的。使用instanceof运算符来判断一个所属的类,是不是某个类或者某个类的子类。

要旅游的每一天的博客 1070

Java中的this和super详解

this的本质就是“创建好的的对象的地址”, 由于在构造方法调用前,对象已经创建, 因此在构造方法中使用this代表“当前对象”。 this表示对正在执行构造方法的对象的引用。 this(参数):调用本类中另一种形式的构造函数(应该为构造函数中的第一条语句)。

sc179的博客 3094

java基础之this、super关键字详解

java基础之this、super详解一、this关键字二、super关键字 一、this关键字 this关键字相信大家都很熟悉,在实际使用中主要有以下三个用途: 1.调用类中的成员变量; 2.调用类中的其他方法; 3.构造方法中调用类的其他构造方法(注意只能调用一个且必须位于首行)。 当我们平时开发中经常使用this之后,你有没有想过this是从哪里来的?this的数据类型是什么?为什么在static方法和static块中无法使用this? 接下来,我将对这些问题一个一个进行剖析,本节主要通过class来

ransijing的博客 2091

Java中this与super的区别

关键字可以用于在一个构造方法中调用同一个类中的其他构造方法,这种用法称为构造方法的“重载”调用。关键字可以用于在子类的构造方法中调用父类的构造方法,这是在继承结构中确保父类的初始化逻辑被执行的重要机制。可以用于在方法中返回当前对象的引用,特别是在方法链(method chaining)中非常有用。可以用来引用当前对象的属性,特别是在方法参数的名字与对象的属性名字相同时,关键字主要用于引用当前对象的实例,调用当前对象的方法或构造方法。关键字也可以用于在类的一个方法中调用同一对象的其他方法。

Flying_Fish_roe的博客 1338

java中关键字this和super的用法和区别

this和super的用法以及它们的区别在这里做了一些整理,大家可以参考使用 1. this:this是自身的一个对象,以下是几种用法: 1.1.当形参与成员变量重名时,用this来区分,this.name 代表类的成员变量 1.2.引用构造函数,this(参数)是调用本类中另一种形式的构造函数,应该放在构造函数的第一条语句 2. super:super是指向离自己最近的父类的一个指针,以下是几种...

大房子爱生活的博客 2479

java中this和super的区别

this关键字: 一.this是什么? this是一个引用类型, 在堆中的每一个java对象上都有this,this保存内存地址指向自身。 二.this及this()能用在哪些地方? this可以用在成员方法中. this()可以用在构造方法中.语法: this(实参); 通过一个构造方法去调用另一个构造方法。 目的:代码重用。 this(实参);必须出现在构造方法的第一行。 应用实例: publ...

qq_43623447的博客 8786

Java中this和super的用法总结

this三大作用: this调用属性、调用方法、利用this表示当前对象。 this this是自身的一个对象,代表对象本身,可以理解为:指向对象本身的一个指针。 this的用法在java中大体可以分为3种: 1.普通的直接引用 这种就不用讲了,this相当于是指向当前对象本身。 2.形参与成员名字重名,用this来区分: class Person { pri...

weixin_44255799的博客 1535

Java中的this和super参数

Copyright©Stonee 在Java中,无论程序员是否在实例方法中添加,编译器都会自动往实例方法中加入一个this参数,this参数的类型为方法所在类的类型。 假设说fun() 是类中的一个方法,当调用这个方法的时候,编译器会把它变为this.fun() 然后通过this去找到fun所在的类。在这之前,当this被检测到时会被压栈,等到找到fun方法后,会把this在传回去,形成:...

王星星 2630

Java 中 this 和 super 的用法总结

this this 是自身的一个对象,代表对象本身,可以理解为:指向对象本身的一个指针。 this 的用法在 Java 中大体可以分为3种: 1.普通的直接引用 这种就不用讲了,this 相当于是指向当前对象本身。 2.形参与成员名字重名,用 this 来区分: class Person { private int age = 10; public Person(){ Sy...

技术空间站的博客 383
上一篇: Java基础:第四十讲 向上转型和强制类型转换
下一篇: JSP培训(1)——概述
老李-大连
博客等级 码龄20年 3206粉丝 308原创
评论 12
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值