一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務(wù)器之家:專注于服務(wù)器技術(shù)及軟件下載分享
分類導(dǎo)航

PHP教程|ASP.NET教程|JAVA教程|ASP教程|

服務(wù)器之家 - 編程語言 - JAVA教程 - 舉例講解Java編程中this關(guān)鍵字與super關(guān)鍵字的用法

舉例講解Java編程中this關(guān)鍵字與super關(guān)鍵字的用法

2020-04-11 14:41全速前行 JAVA教程

這篇文章主要介紹了Java編程中this關(guān)鍵字與super關(guān)鍵字的用法示例,super是this的父輩,在繼承過程中兩個(gè)關(guān)鍵字經(jīng)常被用到,需要的朋友可以參考下

this
總要有個(gè)事物來代表類的當(dāng)前對象,就像C++中的this指針一樣,Java中的this關(guān)鍵字就是代表當(dāng)前對象的引用。
它有三個(gè)主要的作用:
1、在構(gòu)造方法中調(diào)用其他構(gòu)造方法。
      比如有一個(gè)Student類,有三個(gè)構(gòu)造函數(shù),某一個(gè)構(gòu)造函數(shù)中調(diào)用另外構(gòu)造函數(shù),就要用到this(),而直接使用Student()是不可以的。
2、返回當(dāng)前對象的引用。
3、區(qū)分成員變量名和參數(shù)名。
看下面的例子:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
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)調(diào)用其他構(gòu)造函數(shù)
    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();
  }
}

迷失在茫茫的對象海洋時(shí),不要忘了用this來找到自我。

super
super是this的父輩。從面相對象的角度說,這兩個(gè)概念是很好理解的。
子類從父類繼承過來,父類的protected及以上的屬性和方法在子類中是天生就具有的。那么,為什么還要有super這個(gè)關(guān)鍵字?
第一、看父類的構(gòu)造
子類構(gòu)造時(shí)要先調(diào)用父類的默認(rèn)構(gòu)造函數(shù)的,這與C++的構(gòu)造屬性一致。當(dāng)父類有多個(gè)構(gòu)造函數(shù)時(shí),你需要指定調(diào)用哪個(gè)。這是就需要使用super(arg1,arg2...)。
需要注意的是,在子類的構(gòu)造函數(shù)中調(diào)用基類的構(gòu)造函數(shù)時(shí),必須要把super寫作最前面,否則報(bào)錯(cuò)。
第二,在子類覆蓋父類的一些方法中再調(diào)用父類的此方法。大家都知道,在子類中覆蓋父類的一些方法是面向?qū)ο笾卸鄳B(tài)的一種方式,而因?yàn)槠渌N種原因,需要在此方法中調(diào)用父類的此方法,用以區(qū)分,此時(shí)需要使用super來完成。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
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();
  
   
}

將兩個(gè)類文件放在同一個(gè)目錄,編譯并運(yùn)行:

?
1
2
3
D:\workspace\Java\project261\super>javac -d . *java
 
D:\workspace\Java\project261\super>java ClassLeader

運(yùn)行結(jié)果:

?
1
2
3
4
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關(guān)鍵字來完成super相似的功能,C++直接用基類的名字來調(diào)用。

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 欧美作爱福利免费观看视频 | 免费观看a毛片一区二区不卡 | yy111111影院理论大片 | 精品视频99 | 亚洲精品成人AV在线观看爽翻 | 欧美激情精品久久久久久不卡 | 男人捅女人漫画 | 久久亚洲成a人片 | 午夜福利视频极品国产83 | 日韩视频在线免费 | 国产主播精品在线 | 好涨好爽好大视频免费 | 蜜色网| jk制服白丝超短裙流白浆 | xxxxx性13一14 | 狠狠插入 | 欧美一区二区三区大片 | 国产一卡2卡3卡4卡公司科普 | 男女乱淫真视频播放网站 | 日韩在线成人 | 国产播放器一区 | 国产精品短视频 | 偷拍自拍校园春色 | 国产福利视频一区二区微拍 | 百合文高h | 欧美亚洲另类在线观看 | 欧美人妖草草xxoo | 女人被男人躁得好爽免费视频 | 日本老妇和子乱视频 | 99精品免费在线观看 | 精品国产免费观看一区高清 | 韩国甜性涩爱在线播放 | 日本高清免费观看 | 国产成人精品高清不卡在线 | 亚洲乱码一二三四区国产 | 青草青草伊人精品视频 | 乳环贵妇堕落开发调教番号 | 亚洲国产精品日本无码网站 | 极限淫生小说 | 欧美一级欧美三级 | 精品久久国产 |