举例讲解Java编程中this关键字与super关键字的用法
作者:全速前行 发布时间:2023-03-09 01:46:02
标签:Java,this,super
this
总要有个事物来代表类的当前对象,就像C++中的this指针一样,Java中的this关键字就是代表当前对象的引用。
它有三个主要的作用:
1、在构造方法中调用其他构造方法。
比如有一个Student类,有三个构造函数,某一个构造函数中调用另外构造函数,就要用到this(),而直接使用Student()是不可以的。
2、返回当前对象的引用。
3、区分成员变量名和参数名。
看下面的例子:
public class Student
{
private String name;
private int age;
private String college;
public Student()
{
age = 20;
}
public Student(String name)
{
this();//can not be call Student,only use this() method.
this.name = name;
System.out.println("this student name is "+name);
}
public Student(String name,String college)
{
this(name);//C++中可以直接用Student(name)调用其他构造函数
this.college = college;
System.out.println("this student name is "+name+" college is "+college);
}
public Student upgrade()
{
age++;
return this;
}
public void print()
{
System.out.println("name is: "+name
+" age is: "+age
+" college is: "+college);
}
public static void main(String[] args)
{
Student student1 = new Student("linc");
Student student2 = new Student("linc","shenyang college");
student2.upgrade().print();
}
}
迷失在茫茫的对象海洋时,不要忘了用this来找到自我。
super
super是this的父辈。从面相对象的角度说,这两个概念是很好理解的。
子类从父类继承过来,父类的protected及以上的属性和方法在子类中是天生就具有的。那么,为什么还要有super这个关键字?
第一、看父类的构造
子类构造时要先调用父类的默认构造函数的,这与C++的构造属性一致。当父类有多个构造函数时,你需要指定调用哪个。这是就需要使用super(arg1,arg2...)。
需要注意的是,在子类的构造函数中调用基类的构造函数时,必须要把super写作最前面,否则报错。
第二,在子类覆盖父类的一些方法中再调用父类的此方法。大家都知道,在子类中覆盖父类的一些方法是面向对象中多态的一种方式,而因为其他种种原因,需要在此方法中调用父类的此方法,用以区分,此时需要使用super来完成。
public class ClassLeader extends Student
{
private String duty;
public ClassLeader()
{
duty = "class monitor";
}
public ClassLeader(String duty,String name,String college)
{
super(name,college);
this.duty = duty;
}
public void print()
{
super.print();
System.out.println("duty is " + duty);
}
public static void main(String[] args)
{
ClassLeader leader = new ClassLeader("life","linc","shenyang");
leader.print();
}
}
将两个类文件放在同一个目录,编译并运行:
D:\workspace\Java\project261\super>javac -d . *java
D:\workspace\Java\project261\super>java ClassLeader
运行结果:
this student name is linc
this student name is linc college is shenyang
name is: linc age is: 20 college is: shenyang
duty is life
看看在其他语言中是怎样来处理的:
C#中提供了base关键字来完成super相似的功能,C++直接用基类的名字来调用。


猜你喜欢
- 因为我本人很喜欢在不同的页面之间跳转时加点好玩的动画,今天无意间看到一个动画效果感觉不错,几种效果图如下:既然好玩就写在博客中,直接说就是:
- 最近解决了一个令我头疼好久的问题,就是三星手机拍照图片旋转的问题,项目中有上传图片的功能,那么涉及到拍照,从相册中选择图片,别的手机都ok没
- 在项目中用到了MapStruct,对其可以转换JavaBean特别好奇,因为之前都是使用Vo的方式手动set转换,但是接触到MapStruc
- 在一个项目中,如果我们既用到了Struts2又用到了Servlet,项目运行时有可能无法正常访问Servlet,原因是在配置Struts的过
- 引言最近的项目需求中有使用到后端发送http请求,在网上寻找资料后发现可以使用spring自带的RestTemplate类实现,故作此记录项
- 一、概述一般处理程序 ashx :它没有服务器控件,用response输出什么就是什么。生成验证码原理:产生随机字符,并将字符生成为图片,同
- Framework如何实现Binder为了日常的使用framework层同样实现了一套binder的接口。可以肯定的是framework使用
- 用法一:常量在JDK1.5之前,我们定义常量都是:publicstaticfianl....。现在好了,有了枚举,可以把相关的常量分组到一个
- 自从SEOTcs系统11月份24日更新了一下SEO得分算法以来,一直困扰我的一个问题出现了,java的数据job任务,在执行过程中会经常报以
- 仿QQ侧滑删除效果图1.自定义listviewpublic class DragDelListView extends ListView {
- 在Android开发中在所难免的会出现程序crash,俗称崩溃。用户的随意性访问出现测试时未知的Bug导致我们的程序crash,此时我们是无
- java 请求跨域问题解决方法实例详解新建Util类,在Util中添加下面方法: /* * response请求跨域公共设置
- Android在启动模拟器AVD时,出现下面的异常:“Failed to allocate memory: 8”,怎么办?此错误是我们在允许
- 一、技术介绍线上演示地址:http://chat.breez.work实时通信(Instant Messaging,简称IM)是一个实时通信
- 第一步:图形验证码接口1.使用第三方的验证码生成工具Kaptchahttps://github.com/penggle/kaptcha@Co
- 学习Java 本身是一个挺枯燥的过程,说白了就是每天敲代码而已。但如果换一种思路,可以编写各种各样的程序,不仅加深对代码的理解,同时提高兴趣
- 阶乘(Factorial)是个很有意思的函数,但是不少人都比较怕它,我们来看看两个与阶乘相关的问题: 1、 给定一个整数N,那么N的阶乘N!
- 不讲太多理论知识,官网都有,直接上手。1.测试表DROP TABLE IF EXISTS `user`;CREATE TABLE `user
- 有些 SMTP 服务器要求在代表客户端发送电子邮件前验证客户端的身份。当此 SmtpClient 对象应该使用当前登录用
- 零、动态库 System.Math.dll引入动态库 using System.Math;Math 为通用数学函数、对数函数、三角函数等提供