本文目錄一覽:
java中的super()是什麼
要說super就先要說this。
“this”,作為一個特殊的關鍵字,它的規則如下:
1。可以表示構造函數傳遞。this(a,b)表示調用另外一個構造函數。這裡面的this就是一個特殊語法,不是變數,沒有什麼類型。
2。可以在一個類的非static成員內部使用,表示當前這個對象。此時,this就是一個final的普通變數,它有靜態類型,就是這個類C本身;它有動態類型,就是當前這個對象的類型。你可以對它調用成員函數,把它傳遞給別的函數,等等等等。只要一個C類型的final變數可以出現的地方,它就可以出現。
“super”。它和”this”類似,但是也有不同的地方。
1。表示調用父類的構造函數。也是一個特殊語法,不是變數,沒有什麼類型。
2。可以在一個類的非static成員內部使用。比如super.method()。
但是,注意,這個super.method()只是長得跟some_var.method()一樣,一個語法糖而已。實質上,”super”根本不是一個變數。
為什麼不是?因為如果是就壞了。java裡面有一個金科玉律:任何public非static函數的調用都是多態的。
所以,如果super是個變數,也指向當前對象,那麼,不管super的靜態類型是什麼super.method()必然調用的是子類的那個版本,而不會是我們期望的,靜態地選擇父類的那個版本。
所以,你只要把super.xxx看成一個特殊的語法,比如理解為「super::xxx」就好了。
既然super不是一個變數,那麼不能把它象一個普通變數那樣”==”,或者傳遞給某個函數就看起來很正常了,是么?何況,你其實也用不著它,有this你這些要求就都可以辦到了。
3。super的另外一個作用是調用父類的protected函數。只有通過”super”這個魔咒,我們才能操作父類的protected成員,別無它法。
java中Super是什麼意思?
Java是一門面向對象編程語言,不僅吸收了C++語言的各種優點,還摒棄了C++里難以理解的多繼承、指針等概念,因此Java語言具有功能強大和簡單易用兩個特徵。Java語言作為靜態面向對象編程語言的代表,極好地實現了面向對象理論,允許程序員以優雅的思維方式進行複雜的編程。
super是引用當前對象的直接父類中的成員(用來訪問直接父類中被隱藏的父類中成員數據或函數,基類與派生類中有相同成員定義時如:super.變數名 super.成員函數據名。
JAVA中的super代表什麼意思??
super();表示調用父類的構造方法,只是調用方法,不構造對象。 super.fun();表示調用父類的某方法 在繼承的時候這個方法是肯定被繼承下來的。如果fun()這個方法在子類沒有重寫,那麼super.fun();實際上跟直接調用fun();是一樣的。 如果被重寫了,那麼super.fun();就是重寫前的,fun();就是重寫後的。
java中「super」的用法及意義是?
java中的super指的就是父類(super class)\x0d\x0a例:B繼承A\x0d\x0aA類\x0d\x0aclass A {\x0d\x0a private String astr;\x0d\x0a private String bstr;\x0d\x0a public A(string astr, string bstr) {\x0d\x0a this.astr = astr; //this指的是本類,在這裡就是A\x0d\x0a this.bstr = bstr;\x0d\x0a }\x0d\x0a \x0d\x0apublic String getAstr() {\x0d\x0a return this.astr;\x0d\x0a}\x0d\x0a\x0d\x0apublic String getBstr() {\x0d\x0a return this.bstr;\x0d\x0a}\x0d\x0a}\x0d\x0a\x0d\x0aB類\x0d\x0aclass B extends A {\x0d\x0a private String aa;\x0d\x0a private String bb;\x0d\x0a \x0d\x0a public B(String aa, String bb) {\x0d\x0a super(aa, bb); //這裡就調用了父類的構造方法,給父類的super.astr,super.bstr(super.astr也就是父類的astr變數,super.bstr同理)兩個變數賦值了,而不是給this.aa,this.bb(this.aa可以理解為本類的aa變數,this.bb同理)賦值\x0d\x0a // this.aa = aa; \x0d\x0a // this.bb = bb;\x0d\x0a } \x0d\x0a \x0d\x0apuplic String getAA() {\x0d\x0a return this.aa;\x0d\x0a}\x0d\x0a\x0d\x0apublic String getBB() {\x0d\x0a return this.bb;\x0d\x0a}\x0d\x0a}\x0d\x0a\x0d\x0a測試類\x0d\x0apublic class Test {\x0d\x0a public static void main(String[] args) {\x0d\x0a B b = new B(“aabb”, “ccdd”); // 調用B的構造方法,給super.astr,super.bstr賦值了\x0d\x0a System.out.println(b.getAa()); // null 沒有被賦值\x0d\x0a System.out.println(b.getBb()); // null\x0d\x0a System.out.println(b.getAstr()); // aabb 調用父類的方法,返回super.astr的值\x0d\x0a System.out.println(b.getAstr()); // ccdd 調用父類的方法,返回super.bstr的值\x0d\x0a }\x0d\x0a}
原創文章,作者:PIBF,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/143041.html