博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java中的两个关键字——super、this
阅读量:6502 次
发布时间:2019-06-24

本文共 2940 字,大约阅读时间需要 9 分钟。

Java中的两个关键字——superthis

一、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=123this.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则指的是匿名类或内部类本身。这时如果我们要使用外部类的方法和变量的话,则应该加上外部类的类名。


 

三、thissuper的对比

              

NO.

比较点

this

supper

1

访问属性

首先在子类中查找,如果没有就在父类中查找

直接查找父类

2

访问方法

先再子类中找,如果没有就去父类中查找

直接访问父类中到方法

3

调用构造

调用本类中的其他构造方法

调用父类的跟构造方法

4

特殊

指自身对象

没有

5

作为参数

可以作为参数

没有

转载于:https://www.cnblogs.com/shen-hua/p/5438630.html

你可能感兴趣的文章
ps切图教程 android,PS前端切图完整教程
查看>>
html显示服务器状态,显示服务器时间并一直显示(html代码)
查看>>
在线html代码优化,网站seo优化html代码方法
查看>>
HTML如何把输入框变成必填值,required输入框为必填项
查看>>
在html中哪一个不是链接的目标属性,HTML试题
查看>>
android otg 挂载流程,android USB OTG功能如何打开及实现
查看>>
html属性board,pin_board.html
查看>>
html定位有几种,POSITION定位有哪几种?各有什么特点?
查看>>
背锅侠逆袭之路
查看>>
演示:使用协议分析器取证IPv6的报文结构
查看>>
oracle 11gr2 rac中的4种IP解说
查看>>
为什么你找不到工作?
查看>>
20 个免费的 jQuery 的工具提示插件:
查看>>
只有在北方的中国帝国能力享受免费的商业课程:财富规划法与愿景
查看>>
汇编语言的应用
查看>>
device platform 相应的表
查看>>
php des 加密解密实例
查看>>
【Mac】Mac键盘实现Home, End, Page UP, Page DOWN
查看>>
实战使用Axure设计App,使用WebStorm开发(1) – 用Axure描述需求
查看>>
安德鲁斯----多媒体编程
查看>>