1. 程式人生 > >關於java中super與this的簡單理解

關於java中super與this的簡單理解

       最近在學習java,遇到了關於super的一些問題,剛開始看到super是沒有一點概念,自己找了資料便研究了一下:

Java中,有時會遇到子類中的成員變數或方法與父類中的成員變數或方法同名。因為子類中的成員變數或方法名優先順序高,所以子類中的同名成員變數或方法就隱藏了父類的成員變數或方法,但是我們如果想要使用超類中的這個成員變數或方法,就需要用到super.

如果你想用super繼承父類構造的方法 但是沒有放在第一行的話 那麼在super之前的語句 肯定是為了滿足你自己想要完成某些行為的語句 但是你又用了super繼承父類的構造方法 那麼以前所做的修改就都回到以前了 也就是說又成了父類的構造方法了

    再者要說super,先說this,

1。可以表示建構函式傳遞。this(a,b)表示呼叫另外一個建構函式。這裡面的this就是一個特殊語法,不是變數,沒有什麼型別。

2。可以在一個類的非static成員內部使用,表示當前這個物件。此時,this就是一個final的普通變數,它有靜態型別,就是這個類C本身;它有動態型別,就是當前這個物件的型別。你可以對它呼叫成員函式,把它傳遞給別的函式,等等等等。只要一個C型別的final變數可以出現的地方,它就可以出現。

       "super"。它和"this"類似,但是也有不同的地方。可以在一個類的非static成員內部使用。比如super.method()。"super"根本不是一個變數,原因是在java中任何public非static函式的呼叫都是多型的。super的另外一個作用是呼叫父類的protected函式。有時候在構造有引數的構造器時,想要呼叫一個帶引數的基類構造器,就必須使用super顯式地編寫構造器的語句,並且配以適當的引數列表。

   下面是在網上搜集的一些super與this的異同:

 1)super(引數):呼叫基類中的某一個建構函式(應該為建構函式中的第一條語句) 

         2)this(引數):呼叫本類中另一種形成的建構函式(應該為建構函式中的第一條語句)
   3)super: 它引用當前物件的直接父類中的成員(用來訪問直接父類中被隱藏的父類中成員資料或函式,基類與派生類中有相同成員定義時如:super.變數名    super.成員函資料名(實參)

       4)this:它代表當前物件名(在程式中易產生二義性之處,應使用this來指明當前物件;如果函式的形參與類中的成員資料同名,這時需用this來指明成員變數名)

5)呼叫super()必須寫在子類構造方法的第一行,否則編譯不通過。每個子類構造方法的第一條語句,都是隱含地呼叫super(),如果父類沒有這種形式的建構函式,那麼在編譯的時候就會報錯。

6)super()和this()類似,區別是,super()從子類中呼叫父類的構造方法,this()在同一類內呼叫其它方法。

7)super()和this()均需放在構造方法內第一行。

8)儘管可以用this呼叫一個構造器,但卻不能呼叫兩個。

9)this和super不能同時出現在一個建構函式裡面,因為this必然會呼叫其它的建構函式,其它的建構函式必然也會有super語句的存在,所以在同一個建構函式裡面有相同的語句,就失去了語句的意義,編譯器也不會通過。

10)this()和super()都指的是物件,所以,均不可以在static環境中使用。包括:static變數,static方法,static語句塊。

11)從本質上講,this是一個指向本物件的指標, 然而super是一個Java關鍵字。

相關推薦

關於javasuperthis簡單理解

       最近在學習java,遇到了關於super的一些問題,剛開始看到super是沒有一點概念,自己找了資料便研究了一下: 在Java中,有時會遇到子類中的成員變數或方法與父類中的成員變數或方法同名。因為子類中的成員變數或方法名優先順序高,所以子類中的同名成員變數或方

javasuper()this()的區別

This():當前類的物件,super父類物件, 所有的資源都可以訪問。 Super():在子類訪問父類的成員和行為,必須受類繼承規則的約束,在建構函式中,如果第一行沒有寫super(),編譯器會自動插入.但是如果父類沒有不帶引數的建構函式,或這個函式被私有化了(用priva

JAVAsuperthis調用構造函數

main 執行 TP ID sta ger 構造 tps this關鍵字 轉載自:https://blog.csdn.net/u014042146/article/details/48374087,除了個別註釋稍作更改,其他沒變,代碼建議跑一遍,想清楚邏輯。 this

JAVAsuperthis呼叫建構函式

this 和super在建構函式中只能有一個,且都必須是建構函式當中的第一行。 super關鍵字,子類可以通過它呼叫父類的建構函式。 1、當父類的建構函式是無參建構函式時,在子類的建構函式中,就算不寫super()去呼叫父類的建構函式,編譯器不會報錯,因為編譯器

JavaServerSocketSocket簡單的使用

這是一個客戶端與伺服器端的簡單互動程式碼,用於理解之間的資料傳遞。 廢話不多說,直接上程式碼。 客戶端 package com.quaint.scoket; import java.io.InputStream; import java.io.OutputSt

Javasuper的幾種用法並this的區別

1. 子類的建構函式如果要引用super的話,必須把super放在函式的首位. class Base { Base() { System.out.println("Base"); } } public class Checket extends Base {

javasuper的用法和this的區別

super用於呼叫父構造器 ------------------------------------------------------------------------------------------------------------------ 1、子類的建構函

Javasuper關鍵字、super關鍵字this關鍵字的區別

1 super關鍵字 1.1 super用於方法 1.1.1 用於構造方法   當子類呼叫父類無參構造時,super可寫可不寫,表示呼叫父類的無參構造!   當子類呼叫父類有參構造時,super(引數列表)必須要寫,要告訴編輯器呼叫的是哪個有參構造!  

this理解,關鍵字superthis的區別

可用 父類 子類構造方法 屬性 方式 構造 使用方法 並且 this this關鍵字: 1、調用本類中的屬性(成員變量); 2、調用本類中的方法; 3、調用本類中的其他構造方法,調用時要放在構造方法的首行。 註意this只在非靜態方法中使用,靜態方法和靜態代碼不能出現thi

Java 的繼承的簡單例子(super關鍵字)

class Cleanser{ private String s="Cleanser"; public void append(String a){s+=a;} public void dilute(){append("dilute()");} public void apply(){app

super this 關鍵字(Java)

super 與 this 關鍵字 super關鍵字:我們可以通過super關鍵字來實現對父類成員的訪問,用來引用當前物件的父類。 this關鍵字:指向自己的引用。 例項 class Animal { void eat() { System.out.println("a

java邏輯或(&/|)和簡潔或(&&/||)的簡單區別

1、& 稱為邏輯與,只有兩個運算元都是true,結果才是true。      && 稱為簡潔與或者短路與,也是隻有兩個運算元都是true,結果才是true。但是如果左邊運算元為false,就不計算右邊的表示式,直接得出false。類似於短路了右邊。2、

Java類之間的關係以及自己的理解

網上關於此類的討論非常多,發現對於該問題的理解各有各的說法,而各個說法中又相去甚遠。通過瀏覽這些討論以及對《O'Reilly - UML 2.0 In A Nutshell (2007)》的參考,發表一下自己的看法 類間關係有很多種,在大的類別上可以分為兩種:縱向關係、橫向

javawait()、this.wait()、super.wait()、object.wait()的使用區別

今天有位同學過來問我下面程式碼中那個super.wait()是什麼意思? public synchronized void waitAvailable() { try { if (num == "wait") super.wait(); }

java構造器this,super關鍵字介紹

在Java與C語言的程式設計中,必須對建立的物件進行物件初始化,Java採用C++所引入的構造器對物件進行初始化,這是一個在建立物件時被自動呼叫的特殊方法。 注意:構造器的名稱必須與類名完全相同 class Constructor{                     

深入理解Javasuper關鍵字

之前一直以為super和this是相同的,this指代子類當前物件,super指代父類物件。之前與實驗室師兄還談論過這個問題,當時他說的super只是Java中一個關鍵字,與this並不相同。一直有疑惑,覺得下面這篇部落格分析的比較到位。  Java中關鍵字 super

怎麼去理解JAVA物件的關係

首先要明確,在現實生活中,每一個物體都有自己的基本特徵,專業一點也可以說成是屬性有些甚至還有一定的行為。例如 汽車的特徵:有車門、有輪胎、顏色各一等等,行為:有行駛,開車門,開車燈,等等。有這些屬性和行為的東西,我們就可以把它稱之為“汽車”。那麼在java語言中對現實生活中的

Java關於三目運算子理解簡單應用.

名詞解釋 三目運算子:  <表示式1>?<表示式2>:<表示式3>; "?"運算子的含義是: 先求表示式1的值, 如果為真, 則執行表示式2,並返回表示式2的結果 ; 如果表示式1的值為假, 則執行表示式3 ,並返回表示式3的結果.  例:  Java程式碼   i

Javasuper關鍵字和this關鍵字的比較

1、基本概念的比較 this關鍵字用於代表本類的物件; super關鍵字用於代表父類的物件; 2、使用方式的比較 使用this. 的方式可以訪問本類的成員變數和成員方法; 使用super. 的

Java利用socket實現簡單的服務端客戶端的通訊(入門級)

Java程式設計中,要想要使用網路通訊,就離不開Socket程式設計,在此對socket進行簡單的介紹。首先宣告,這是一個入門級的介紹,僅僅簡單的實現了客戶端向服務端傳送資料,服務端正常的接收資料,當接收到特定的資料時,服務端和客戶端都關閉,一個服務端對應一個客戶端,不涉及