亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Java中的this和super實(shí)例淺析

 更新時(shí)間:2017年03月01日 11:37:09   作者:五道杠大隊(duì)長(zhǎng)  
要說(shuō)this和super就不得不說(shuō)Java的封裝和繼承了。這篇文章主要介紹了Java中的this和super實(shí)例淺析,需要的朋友可以參考下

要說(shuō)this和super就不得不說(shuō)Java的封裝和繼承了,首先說(shuō)封裝,這是一種思想,算不上一種技術(shù),核心思想就是將對(duì)象的同一行為和狀態(tài)看成是一個(gè)整體,將無(wú)需對(duì)外界暴露的屬性和方法隱藏起來(lái),比如一些方法的具體實(shí)現(xiàn)和一些私有的變量,通過(guò)公共的方法提供對(duì)屬性的操作,從而提高安全性。

class Person {
 private String name = "無(wú)名氏";//私有的內(nèi)部成員變量
 private int age = 20;//私有的內(nèi)部成員變量
 public void sayHello(){//公有的方法,外界可以通過(guò)調(diào)用這個(gè)方法獲得需要的功能
  System.out.println("我的名字是"+name+",今年"+age+"了");
 }
 public String getName() {//公有的方法,外界通過(guò)操作這個(gè)方法獲取私有變量值
  return name;
 }
 public void setName(String name) {//公有方法,外界通過(guò)操作這個(gè)方法設(shè)置公有變量的值
  this.name = name;
 }
 public int getAge() {
  return age;
 }
 public void setAge(int age) {
  this.age = age;
 }
}

然而這種封裝也不是絕對(duì)的,當(dāng)我們需要一些很相似的類的時(shí)候,往往希望能夠通過(guò)一個(gè)類派生出許多的擁有共同的特性的類,比如通過(guò)動(dòng)物這個(gè)類,派生出貓狗雞鴨這些類,他們都擁有動(dòng)物的特性,但是又各有特點(diǎn)。這就是Java中的繼承,通過(guò)繼承,我們可以獲得父類所暴露給子類的所有成員,而又可以在父類的基礎(chǔ)上構(gòu)建自己特有的屬性。

public class StaticDemo {
 public static void main(String[] args) {
  Student s = new Student();
  s.age = 20;//從父類繼承的屬性
  s.name = "張同學(xué)";
  s.stuNumber = 10;//子類特有的成員變量
  s.sayHello();//從父類繼承的方法
  s.study();
 }
}
class Person {
 protected String name = "無(wú)名氏";// 子類共享的成員變量
 protected int age = 20;// 子類共享的成員變量
 public void sayHello() {// 公有的方法,外界可以通過(guò)調(diào)用這個(gè)方法獲得需要的功能
  System.out.println("我的名字是" + name + ",今年" + age + "了");
 }
}
class Student extends Person {
 public int stuNumber = 20;// 學(xué)生特有的學(xué)號(hào)
 public void study() {// 學(xué)生特有的方法,學(xué)習(xí)
  System.out.println("好好學(xué)習(xí)!");
 }
}

至此,我們已經(jīng)大概了解封裝和繼承,那下面就來(lái)看看this和super關(guān)鍵字是什么意思。
super關(guān)鍵字代表的是父類對(duì)象,this關(guān)鍵字代表的是當(dāng)前對(duì)象。要理解這些,首先我們要看看子類在創(chuàng)建對(duì)象的時(shí)候執(zhí)行了什么。為了方便起見(jiàn),在此都使用無(wú)參構(gòu)造方法。

編譯器找到子類無(wú)參構(gòu)造方法。

執(zhí)行子類無(wú)參構(gòu)造方法。

在子類無(wú)參構(gòu)造方法的方法體中,第一句代碼是隱藏得super();這句代碼的意思是執(zhí)行父類構(gòu)造方法。

跳轉(zhuǎn)到父類構(gòu)造方法中,執(zhí)行父類構(gòu)造方法,注意,此時(shí)子類構(gòu)造方法并未執(zhí)行完畢,并且若父類還有父類,則一直執(zhí)行上一層父類的構(gòu)造方法,直到找到所有類的祖宗Object類。

將父類的對(duì)象的引用存入子類的super中,即子類中的super代表的是父類實(shí)體。然而在父類中,super代表的又是父類的父類的實(shí)體。

將創(chuàng)建出的當(dāng)前類的引用存入this。

public class StaticDemo {
 public static void main(String[] args) {
  GirlStudent g = new GirlStudent();
  g.sayName();
 }
}
class Person {
 protected String name = "無(wú)名氏";// 子類共享的成員變量
 protected int age = 20;// 子類共享的成員變量
 public void sayHello() {// 公有的方法,外界可以通過(guò)調(diào)用這個(gè)方法獲得需要的功能
  System.out.println("我的名字是" + name + ",今年" + age + "了");
 }
}
class Student extends Person {
 public int stuNumber = 20;// 學(xué)生特有的學(xué)號(hào)
 public String name = "張同學(xué)";
 public String getSuperName() {//獲取當(dāng)前類的父類名字的方法,對(duì)于student是父類,對(duì)于girlstudent則是爺爺類
  return super.name;//父類中的super代表的是父類的父類,即student的父類即person類,可以看出子類一旦初始化,將會(huì)創(chuàng)建出所有父類對(duì)象,一直到object
 }
}
class GirlStudent extends Student{
 public String name = "小紅";
 public void sayName(){
  System.out.println("自己的名字是:"+this.name+",父類的名字是:"+super.name+",爺爺類的名字是:"+super.getSuperName());
 }
}

由此可以看出super的用途:用于調(diào)用子類隱藏的父類的屬性,比如上述代碼中的name屬性,還有一個(gè)比較重要的用途就是用于調(diào)用被子類覆寫(xiě)的方法,此時(shí)方法名相同,必須使用super才能調(diào)用父類的方法。
this的用途:在變量定義不明確時(shí),用來(lái)確定調(diào)用的具體是哪個(gè)變量。

 public void setName(String name){
  this.name=name;
 }

在上面的代碼中由于傳入的變量也是name,類中本來(lái)就存在一個(gè)變量也叫name,此時(shí)將不明確name是哪個(gè),所以使用this進(jìn)行區(qū)分。

PS:super和this的異同:

super(參數(shù)):調(diào)用基類中的某一個(gè)構(gòu)造函數(shù)(應(yīng)該為構(gòu)造函數(shù)中的第一條語(yǔ)句)

this(參數(shù)):調(diào)用本類中另一種形成的構(gòu)造函數(shù)(應(yīng)該為構(gòu)造函數(shù)中的第一條語(yǔ)句)

super: 它引用當(dāng)前對(duì)象的直接父類中的成員(用來(lái)訪問(wèn)直接父類中被隱藏的父類中成員數(shù)據(jù)或函數(shù),基類與派生類中有相同成員定義時(shí)如:super.變量名    super.成員函數(shù)據(jù)名(實(shí)參)

this:它代表當(dāng)前對(duì)象名(在程序中易產(chǎn)生二義性之處,應(yīng)使用this來(lái)指明當(dāng)前對(duì)象;如果函數(shù)的形參與類中的成員數(shù)據(jù)同名,這時(shí)需用this來(lái)指明成員變量名)

調(diào)用super()必須寫(xiě)在子類構(gòu)造方法的第一行,否則編譯不通過(guò)。每個(gè)子類構(gòu)造方法的第一條語(yǔ)句,都是隱含地調(diào)用super(),如果父類沒(méi)有這種形式的構(gòu)造函數(shù),那么在編譯的時(shí)候就會(huì)報(bào)錯(cuò)。

super()和this()類似,區(qū)別是,super()從子類中調(diào)用父類的構(gòu)造方法,this()在同一類內(nèi)調(diào)用其它方法。

super()和this()均需放在構(gòu)造方法內(nèi)第一行。

盡管可以用this調(diào)用一個(gè)構(gòu)造器,但卻不能調(diào)用兩個(gè)。

this和super不能同時(shí)出現(xiàn)在一個(gè)構(gòu)造函數(shù)里面,因?yàn)閠his必然會(huì)調(diào)用其它的構(gòu)造函數(shù),其它的構(gòu)造函數(shù)必然也會(huì)有super語(yǔ)句的存在,所以在同一個(gè)構(gòu)造函數(shù)里面有相同的語(yǔ)句,就失去了語(yǔ)句的意義,編譯器也不會(huì)通過(guò)。

this()和super()都指的是對(duì)象,所以,均不可以在static環(huán)境中使用。包括:static變量,static方法,static語(yǔ)句塊。

從本質(zhì)上講,this是一個(gè)指向本對(duì)象的指針, 然而super是一個(gè)Java關(guān)鍵字。

相關(guān)文章

  • Spring中的@AutoWired與@Resource及@Qualifier注解詳解

    Spring中的@AutoWired與@Resource及@Qualifier注解詳解

    這篇文章主要介紹了Spring中的@AutoWired與@Resource及@Qualifier注解詳解,spring不但支持自己定義的@Autowired注解,所以Autowired與Spring是強(qiáng)相關(guān)性,只能在spring框架中使用,而后幾個(gè)注解則不然,需要的朋友可以參考下
    2023-11-11
  • java 線程公平鎖與非公平鎖詳解及實(shí)例代碼

    java 線程公平鎖與非公平鎖詳解及實(shí)例代碼

    這篇文章主要介紹了java 線程公平鎖與非公平鎖詳解及實(shí)例代碼的相關(guān)資料,需要的朋友可以參考下
    2017-02-02
  • 用SpringMVC編寫(xiě)一個(gè)HelloWorld的詳細(xì)過(guò)程

    用SpringMVC編寫(xiě)一個(gè)HelloWorld的詳細(xì)過(guò)程

    SpringMVC是Spring的一個(gè)后續(xù)產(chǎn)品,是Spring的一個(gè)子項(xiàng)目<BR>SpringMVC?是?Spring?為表述層開(kāi)發(fā)提供的一整套完備的解決方案,本文我們將用SpringMVC編寫(xiě)一個(gè)HelloWorld,文中有詳細(xì)的編寫(xiě)過(guò)程,需要的朋友可以參考下
    2023-08-08
  • 一文帶你解讀Java序列化和反序列化機(jī)制

    一文帶你解讀Java序列化和反序列化機(jī)制

    序列化是將對(duì)象轉(zhuǎn)換成二進(jìn)制字節(jié)流的過(guò)程;反序列化是從二進(jìn)制字節(jié)流中恢復(fù)對(duì)象的過(guò)程。本文將大家詳細(xì)講講二者的原理與實(shí)現(xiàn),希望對(duì)大家有所幫助
    2023-01-01
  • SpringBoot2.x 集成騰訊云短信的詳細(xì)流程

    SpringBoot2.x 集成騰訊云短信的詳細(xì)流程

    本文主要對(duì)SpringBoot2.x集成騰訊云短信進(jìn)行簡(jiǎn)單總結(jié),其中SpringBoot使用的2.4.5版本,本文通過(guò)業(yè)務(wù)流程圖實(shí)例代碼相結(jié)合給大家介紹的非常詳細(xì),需要的朋友參考下吧
    2021-06-06
  • java導(dǎo)出生成word的簡(jiǎn)單方法

    java導(dǎo)出生成word的簡(jiǎn)單方法

    這篇文章主要為大家詳細(xì)介紹了java導(dǎo)出生成word的簡(jiǎn)單方法,感興趣的朋友可以參考一下
    2016-03-03
  • Spring核心容器IOC原理實(shí)例解析

    Spring核心容器IOC原理實(shí)例解析

    這篇文章主要介紹了Spring核心容器IOC原理實(shí)例解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-02-02
  • SpringMVC MVC架構(gòu)與Servlet使用詳解

    SpringMVC MVC架構(gòu)與Servlet使用詳解

    MVC設(shè)計(jì)模式一般指 MVC 框架,M(Model)指數(shù)據(jù)模型層,V(View)指視圖層,C(Controller)指控制層。使用 MVC 的目的是將 M 和 V 的實(shí)現(xiàn)代碼分離,使同一個(gè)程序可以有不同的表現(xiàn)形式。其中,View 的定義比較清晰,就是用戶界面
    2022-10-10
  • springboot詳解實(shí)現(xiàn)車險(xiǎn)理賠信息管理系統(tǒng)代碼

    springboot詳解實(shí)現(xiàn)車險(xiǎn)理賠信息管理系統(tǒng)代碼

    本系統(tǒng)基于Springboot開(kāi)發(fā)實(shí)現(xiàn)了一個(gè)為用戶車險(xiǎn)進(jìn)行理賠信息管理的一個(gè)信息化管理系統(tǒng),核心的業(yè)務(wù)主要是用戶申請(qǐng)保險(xiǎn)理賠,管理員審核進(jìn)入理賠程序,事故調(diào)查員對(duì)事故進(jìn)行調(diào)查和現(xiàn)場(chǎng)勘察,這其中共涉及到三類用戶,購(gòu)買(mǎi)保險(xiǎn)的客戶,事故調(diào)查員和系統(tǒng)管理員
    2022-06-06
  • java實(shí)現(xiàn)String類型和Date類型相互轉(zhuǎn)換

    java實(shí)現(xiàn)String類型和Date類型相互轉(zhuǎn)換

    很多人表示,java將string類型轉(zhuǎn)為date類型不知道應(yīng)該怎樣做,本文就來(lái)介紹一下java實(shí)現(xiàn)String類型和Date類型相互轉(zhuǎn)換,具有一定的參考價(jià)值,感興趣的可以了解一下
    2023-10-10

最新評(píng)論