av一区二区在线观看_亚洲男人的天堂网站_日韩亚洲视频_在线成人免费_欧美日韩精品免费观看视频_久草视

您的位置:首頁技術(shù)文章
文章詳情頁

Java中超詳細(xì)this與super的概念和用法

瀏覽:19日期:2022-08-17 11:59:53

前言:理論代碼必須結(jié)合起來才能真正的掌握

一、this

概念:this代表著當(dāng)前對象的引用,也是當(dāng)前函數(shù)所屬對象的引用。直白的說,哪個對象調(diào)用了當(dāng)前函數(shù),this就代表哪個對象。

常見的用法(理論不理解就先參考下面案例)

最常見的情況是是對象的一個屬性或被構(gòu)造器的參數(shù)屏蔽時,如果需要調(diào)用屏蔽的屬性,this就代表哪個對象 this只能在方法內(nèi)使用,表示正在調(diào)用方法的那個對象,但是,如果在方法內(nèi)調(diào)用同一個類的另一個方法,就不必使用this,直接調(diào)用即可,this關(guān)鍵字是能省則省 this和static的關(guān)系: static方法是類方法,依附于類而不依賴與任何對象,static屬性是指該屬性是類中所有對象所共享的,static方法是類方法,先于任何實例(對象)存在,static在類加載時就已經(jīng)存在了,但對象是在創(chuàng)建時才生成;方法中使用this關(guān)鍵字它的值是當(dāng)前對象的引用,只能用它調(diào)用屬于當(dāng)前對象的屬性和方法和。但是,this可以調(diào)用static類型的屬性,舉個例子:一個父親是不可能向他還未出生的孩子借錢的,但孩子出生后完全可以找他父親去借錢; 對于一個類中的this,不一定單指這個的對象,也可能是這個類的子類的對象(抽象類里面的this只能是實際調(diào)用中它的派生類的實例化對象); 總之:如果new 父類對象的話,父類方法的this指向的是父類,如果new 子類,那么父類方法的this指向的是子類 this關(guān)鍵字也可以用于在構(gòu)造函數(shù)中調(diào)用其他構(gòu)造函數(shù)。但是,只能定義在構(gòu)造函數(shù)的第一行,因為初始化動作要先執(zhí)行

this使用案例

class Student extends Person{ public Student(String name, int age, String nation) { super(name); }}public class Person{ private String name; private int age; private static String nation = 'chinese'; public Person(String name) { this.name = name; } public Person(String name, int age) { //初始化方法必須放到第一行 this(name); this.age = age; } //局部變量name和age屏蔽了name和age屬性,用this進(jìn)行標(biāo)識 public Person(String name, int age,String nation) { this.name = name; this.age = age; //this可以調(diào)用到靜態(tài)屬性 this.nation = nation; } public void test(){ System.out.println('測試'); } public static void test2(){ //靜態(tài)方法內(nèi)不能出現(xiàn)this或super System.out.println('測試'); } public void print(){ //調(diào)用類內(nèi)部的方法(toString已重寫)加不加this都行 this.toString(); } @Override public String toString() { return 'Person{' + 'name=’' + name + ’’’ + ', age=' + age + ’}’; } public static void main(String[] args) { //這個this代表的student對象 Student student = new Student('wzh',20,'chinese2'); System.out.println(student.toString()); //這個this代表的是person對象 Person person = new Person('wzh2',20,'chinese3'); System.out.println(student.toString()); //擴展,全局變量nation的值最后是chinese3 System.out.println(Person.nation); }}

結(jié)果:

Java中超詳細(xì)this與super的概念和用法

二、super

概念:super可以理解為“父類的”,super可以在子類中調(diào)用父類的屬性,方法,構(gòu)造器,super關(guān)鍵字和this一樣能省就省;

注意點:1、this和super很像,this指向的是當(dāng)前對象的調(diào)用,super指向的是當(dāng)前調(diào)用對象的父類2、類加載完畢,創(chuàng)建對象,父類的構(gòu)造方法會被調(diào)用

父類如果重寫了無參構(gòu)造器或者父類中沒有有參構(gòu)造器,那么子類的構(gòu)造方法第一行就是super(),可以省略

class Student extends Person{ //這是默認(rèn)的構(gòu)造器內(nèi)容,寫出來是為了幫大家理解 public Student(){ super(); }}public class Person{ private String name; private int age;}

如果父類中定義了有參構(gòu)造器但沒有顯示寫出無參構(gòu)造器,那么必須通過super調(diào)用父類的有參構(gòu)造函數(shù),如果父類中定義了多個有參構(gòu)造區(qū),那么用super調(diào)用其中一個有參構(gòu)造器即可

class Student extends Person{ public Student(String name, int age) { //任選一個父類有參構(gòu)造 //super(name, age); super(name); }}public class Person{ private String name; private int age; public Person(String name, int age) { this.name = name; this.age = age; } public Person(String name) { this.name = name; }}

3、子類相應(yīng)構(gòu)造創(chuàng)建了一個子類對象,該子類對象還包含了一個父類對象。該父類對象在子類對象內(nèi)部(正如子類的構(gòu)造器無論如何都要通過super調(diào)用父類構(gòu)造器一樣,子類的對象被成功構(gòu)造,那么它的內(nèi)部就會包含父類的對象),證明如下

子類重寫父類的方法后可以通過super調(diào)用到父類的方法

class Student extends Person { private String name = 'wzh2'; @Override public String getName() { return '子類' + name; } public String getParentName(){ //調(diào)用父類的方法 return super.getName(); } public static void main(String[] args) { Student student = new Student(); System.out.println(student.getName()); System.out.println(student.getParentName()); }}public class Person{ //protected意味著子類和同一包中可以訪問 protected String name = 'wzh'; protected int age = 20; public String getName() { return '父類' +name; }}

輸出結(jié)果

Java中超詳細(xì)this與super的概念和用法

子類獲取到父類的變量

class Student extends Person{ public void parentDisplay(){ System.out.println(super.age + super.name); } public static void main(String[] args) { new Student().parentDisplay(); //輸出結(jié)果:20wzh }}public class Person{ //protected意味著子類和同一包中可以訪問 protected String name = 'wzh'; protected int age = 20;}

調(diào)用父類的構(gòu)造器不再舉例

4、this super只能在有對象的前提下使用,不能在靜態(tài)上下文使用5、如果一個類沒有基礎(chǔ)任何父類,super還有用嗎?肯定有用,可以調(diào)用Object中的方法

public class Person{ private String name; private int age; public void display(){ //通過this或super調(diào)用到了Object的toString(); System.out.println(super.toString()); } public static void main(String[] args) { new Person().display(); //輸出為Person@452b3a41 }}

到此這篇關(guān)于Java中超詳細(xì)this與super的概念和用法的文章就介紹到這了,更多相關(guān)javathis與super的概念和用法內(nèi)容請搜索好吧啦網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持好吧啦網(wǎng)!

標(biāo)簽: Java
相關(guān)文章:
主站蜘蛛池模板: 亚洲国产成人一区二区 | 精品国产黄a∨片高清在线 成人区精品一区二区婷婷 日本一区二区视频 | 中文字幕一区二区三区精彩视频 | 久草青青| www.操.com | 日韩精品在线观看视频 | 日韩成人av在线 | 欧美一级毛片久久99精品蜜桃 | 国产视频久 | 色999视频| 国产真实乱全部视频 | 麻豆精品一区二区三区在线观看 | 日韩一级| 91午夜在线 | 国产日韩欧美 | 在线播放中文字幕 | 精品日韩一区二区 | 午夜噜噜噜 | 观看毛片 | 日本不卡免费新一二三区 | 羞羞视频免费在线 | 日韩在线视频一区 | 精品欧美一区二区三区久久久 | 成人h视频 | 香蕉久久av | 久久久久99 | 亚洲精品乱码久久久久久蜜桃 | 国产色网站 | 高清久久久| 99久久国产综合精品麻豆 | 亚洲欧美自拍偷拍视频 | 欧美在线a | 欧美 中文字幕 | 欧洲av在线 | 天天操综合网 | 午夜寂寞影院在线观看 | 成人超碰 | 精品一区二区三区免费视频 | 中文字幕中文字幕 | 亚洲欧美日韩一区二区 | 国产一区91精品张津瑜 |