Java中的两个关键字——super、this
Java中的两个关键字——super、this
一、super
super 是java中方的一个关键字,用它可以引用父类中的成员:
super可用于访问父类中定义的属性
super可用于调用父类中定义的成员方法
super可用于在子类构造器中调用父类的构造器
使用super关键字注意事项:
1、当子类和父类都有同名的属性时,在子类中如果要使用父类的属性 super . 属性
2、 super只能应用在成员方法和构造方法中,不能用在静态方法中(和this是一样的)
3、如果在构造方法中使用必须放在第一行
4、在构造方法中this()和super()不能同时出现
super没有什么需要解释的地方,我们用代码来看看super具体的一些强大功能吧
示例一、使用super调用基类的属性:
public class Father {
int num=20;
}
public class Child extends Father{
int num;
public void print(){
num=10;
super.num=30;
System.out.println("num="+num);
System.out.println("super.name="+super.num);
}
}
public class Test {
public static void main(String[] args) {
Child xm=new Child();
xm.print();
}
}
运行结果:

示例二、使用super调用基类中的构造方法:
public class Father {
int num;
public Father() {
System.out.println("父类中的无参构造方法---");
}
public Father(int num){
System.out.println("父类中的有参的构造方法----"+num);
}
}
public class Child extends Father{
int num;
public Child() {
super(30);
System.out.println("子类无参构造方法---");
}
public Child(int num) {
this.num = num;
System.out.println("子类中的有参的构造方法---"+num);
}
}
解释一下上面的这段代码:在Child类中的第一个构造函数里面,super(30);它会去调用父类中嗲有一个int型参数的构造方法。在Child类中的第二构造函数里面,虽然没有super关键字出现,但是系统会默认给它一个super();去调用父类中默认的也就是无参的构造方法。
常见错误:(把示例二代码删除父类中的无参构造方法)
public class Father {
int num;
public Father(int num){
System.out.println("父类中的有参的构造方法----"+num);
}
}
public class Child extends Father{
int num;
public Child() {
super(30);
System.out.println("子类无参构造方法---");
}
public Child(int num) {
this.num = num;
System.out.println("子类中的有参的构造方法---"+num);
}
}
上面删除线里面的代码的错误:我们知道,在构造方法,无论我们写不写supper(),系统都会给我们一个默认的supper()去调用父类中的无参构造方法。上面的代码中,我们删除了父类中的无参构造方法,而在子类中的有参构造方法中,系统默认调用父类中的无参构造方法,所以会报错,这里需要注意。
二、this关键字:
1.this关键字-用法一:当类中某个非静态方法的参数名跟类的某个成员变量名相同时,为了避免参数的作用范围覆盖了成员变量的作用范围,必须明确地使用this关键字来指定成员变量
代码示例:
public class ThisDemo {
int a=123;
public void show() {
int a=321;
System.out.println("a="+a);
System.out.println("this.a="+this.a);
this.a=a;
System.out.println("赋值后的this.a="+this.a);
}
}
测试类:
public class Test {
public static void main(String[] args) {
ThisDemo h=new ThisDemo();
h.show();
}
}
运行结果:
解释:由于局部变量优先级高于成员变量,所以第一条输出语句里面的a=321,第二个输出语句中,this指定了这里的a是成员变量中的a,所以输出成员变量a=123;this.a=a,也就是将局部变量的值赋值给成员。
2.this关键字-用法二:如果某个构造方法的第一条语句具有形式this(...),那么这个构造方法将调用本类中的其他构造方法。
代码示例:
public class ThisDemo {
public ThisDemo() {
this("shen_hua");
}
public ThisDemo(String name) {
//带一个String类型的参数的构造方法
}
public ThisDemo(String name,int age) {
//带两个参数的构造方法
}
}
解释:在第一个无参的构造方法里面,this();包含了一个字符串,所以它会调用本类中形参为一个字符串的构造方法。
3.this关键字除了可以引用变量或者成员方法之外,每个类的非静态方法都会隐含一个this隐含名称,它指向调用这个方法的对象。
4.一些内部类和匿名类,如事件处理。当在匿名类中用this时,这个this则指的是匿名类或内部类本身。这时如果我们要使用外部类的方法和变量的话,则应该加上外部类的类名。
三、this和super的对比
|
NO. |
比较点 |
this |
supper |
|
1 |
访问属性 |
首先在子类中查找,如果没有就在父类中查找 |
直接查找父类 |
|
2 |
访问方法 |
先再子类中找,如果没有就去父类中查找 |
直接访问父类中到方法 |
|
3 |
调用构造 |
调用本类中的其他构造方法 |
调用父类的跟构造方法 |
|
4 |
特殊 |
指自身对象 |
没有 |
|
5 |
作为参数 |
可以作为参数 |
没有 |
Java中的两个关键字——super、this的更多相关文章
- 如何理解 Java 中的 <T extends Comparable<? super T>>
Java 中类似 <T extends Comparable<? super T>> 这样的类型参数 (Type Parameter) 在 JDK 中或工具类方法中经常能看到. ...
- Java中的50个关键字
form:http://blog.csdn.net/luoweifu/article/details/6776240 Java中的50个关键字 关键字也称为保留字,是指java语言中规定了特定含义的标 ...
- Java中this、static关键字的内存图解
Java中的关键字有很多,abstract default goto* null switch boolean do if package nchronzed break dou ...
- JAVA中比较两个文件夹不同的方法
JAVA中比较两个文件夹不同的方法,可以通过两步来完成,首先遍历获取到文件夹下的所有文件夹和文件,再通过文件路径和文件的MD5值来判断文件的异同.具体例子如下: public class TestFo ...
- Java 中如何计算两个字符串时间之间的时间差?(单位为分钟)
Java 中如何计算两个字符串时间之间的时间差?(单位为分钟) import java.text.DateFormat; import java.text.ParseException; import ...
- Java中的两种异常类型及其区别?
Java中的两种异常类型是什么?他们有什么区别? Throwable包含了错误(Error)和异常(Excetion两类) Exception又包含了运行时异常(RuntimeException, 又 ...
- Java中static、this、super、final的用法
一. static 请先看下面这段程序: public class Hello{public static void main(String[] args){//(1)System. ...
- java中static、this、super、final用途、用法及实例
一.static 请先看下面这段程序: public class Hello { public static void main(String[] args){ //(1) System.out.pr ...
- 简析--Java中常见的一些关键字的解析
在Java开发中我们经常会用到一些关键字,关键字的定义很有意思"Java事先定义好的,具有特殊含义的单词",那么我们怎么来用好关键字呢?下面我们对一些常见的关键字进行分析和比较; ...
随机推荐
- SQL Server代理(10/12):使用代理账号运行作业
SQL Server代理是所有实时数据库的核心.代理有很多不明显的用法,因此系统的知识,对于开发人员还是DBA都是有用的.这系列文章会通俗介绍它的很多用法. 在这一系列的上一篇,你查看了msdb库下用 ...
- WCF会话(Session)与实例(Instance)管理
一.理解Session 1.Session的作用:保留Client和Service之间交互的状态,确保Client与Service之间交互唯一性(SessionId),即:多个Client同时访问Se ...
- MVC之前的那点事儿系列(6):动态注册HttpModule
文章内容 通过前面的章节,我们知道HttpApplication在初始化的时候会初始化所有配置文件里注册的HttpModules,那么有一个疑问,能否初始化之前动态加载HttpModule,而不是只从 ...
- openjudge7834:分成互质组 解析报告
7834:分成互质组 总时间限制: 1000ms 内存限制: 65536kB 描述 给定n个正整数,将它们分组,使得每组中任意两个数互质.至少要分成多少个组? 输入 第一行是一个正整数n.1 &l ...
- Java总结篇系列:Java String
String作为Java中最常用的引用类型,相对来说基本上都比较熟悉,无论在平时的编码过程中还是在笔试面试中,String都很受到青睐,然而,在使用String过程中,又有较多需要注意的细节之处. 1 ...
- 使用MiniProfiler跟踪MVC + EF + Bootstrap 2 权限管理系统的性能消耗
安装MiniProfiler 在MVC + EF + Bootstrap 2 权限管理系统入门级(附源码)文章中下载了它的源码,调试模式下打开一个页面都要再2.5秒以上,所以使用MiniProfile ...
- 纯灌水Linus主义
卖桃君重新整理了Linus的相关故事,在此摘选对自己有触动的内容. 关于生命的意义,李纳斯的解释是,有三件事具有生命的意义.它们是你生活当中所有事情的动机.第一是生存,第二是社会秩序,第三是娱乐.生活 ...
- contentResolver
今天练习一个联系人的增,写,改,查的几项操作,其中一个重要的知识点 ContentResolver 还有一篇不错的参考文献 主要参见下面这个链接 http://cthhqu.blog.51cto. ...
- java三种实现线程的方法比较
1.继承Thread 2.实现Runnable 1和2的比较,1可以创建不同的任务,每个任务互不干扰,对于2,相当于只执行一个任务,多个任务之间互相影响,比如售票系统,每售出一张票,票数都要减1,这个 ...
- java RSA加解密以及用途
在公司当前版本的中间件通信框架中,为了防止非授权第三方和到期客户端的连接,我们通过AES和RSA两种方式的加解密策略进行认证.对于非对称RSA加解密,因为其性能耗费较大,一般仅用于认证连接,不会用于每 ...