最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時(shí)間:2021年02月03日 10:16:34   作者:挖坑埋你的王子晗  
這篇文章主要介紹了Java中超詳細(xì)this與super的概念和用法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下

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

一、this

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

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

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

 public static void test2(){
  //靜態(tài)方法內(nèi)不能出現(xiàn)this或super
  System.out.println("測(cè)試");
 }

 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) {
  //這個(gè)this代表的student對(duì)象
  Student student = new Student("wzh",20,"chinese2");
  System.out.println(student.toString());
  //這個(gè)this代表的是person對(duì)象
  Person person = new Person("wzh2",20,"chinese3");
  System.out.println(student.toString());
  //擴(kuò)展,全局變量nation的值最后是chinese3
  System.out.println(Person.nation);
 }
}

結(jié)果:

在這里插入圖片描述

二、super

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

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

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

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

public class Person{
 private String name;
 private int age;
}

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

class Student extends Person{

 public Student(String name, int age) {
  //任選一個(gè)父類有參構(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)建了一個(gè)子類對(duì)象,該子類對(duì)象還包含了一個(gè)父類對(duì)象。該父類對(duì)象在子類對(duì)象內(nèi)部(正如子類的構(gòu)造器無(wú)論如何都要通過(guò)super調(diào)用父類構(gòu)造器一樣,子類的對(duì)象被成功構(gòu)造,那么它的內(nèi)部就會(huì)包含父類的對(duì)象),證明如下

子類重寫父類的方法后可以通過(guò)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意味著子類和同一包中可以訪問(wèn)
 protected String name = "wzh"; 
 protected int age = 20;

 public String getName() {
  return "父類" +name;
 }
}

輸出結(jié)果

在這里插入圖片描述

子類獲取到父類的變量

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意味著子類和同一包中可以訪問(wèn)
 protected String name = "wzh";
 protected int age = 20;
} 

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

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

public class Person{
 private String name;
 private int age;

 public void display(){
  //通過(guò)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)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java實(shí)現(xiàn)簡(jiǎn)單井字棋小游戲代碼實(shí)例

    Java實(shí)現(xiàn)簡(jiǎn)單井字棋小游戲代碼實(shí)例

    這篇文章主要介紹了Java實(shí)現(xiàn)簡(jiǎn)單井字棋小游戲代碼實(shí)例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-03-03
  • java多線程之線程安全的單例模式

    java多線程之線程安全的單例模式

    這篇文章主要為大家詳細(xì)介紹了java多線程之線程安全的單例模式,文章內(nèi)容全面,感興趣的小伙伴們可以參考一下
    2016-03-03
  • Springboot自動(dòng)加載配置的原理解析

    Springboot自動(dòng)加載配置的原理解析

    Springboot遵循“約定優(yōu)于配置”的原則,使用注解對(duì)一些常規(guī)的配置項(xiàng)做默認(rèn)配置,減少或不使用xml配置,讓你的項(xiàng)目快速運(yùn)行起來(lái),這篇文章主要給大家介紹了關(guān)于Springboot自動(dòng)加載配置原理的相關(guān)資料,需要的朋友可以參考下
    2021-10-10
  • Java實(shí)現(xiàn)對(duì)兩個(gè)List快速去重并排序操作示例

    Java實(shí)現(xiàn)對(duì)兩個(gè)List快速去重并排序操作示例

    這篇文章主要介紹了Java實(shí)現(xiàn)對(duì)兩個(gè)List快速去重并排序操作,結(jié)合實(shí)例形式較為詳細(xì)的分析了Java針對(duì)list的遍歷、去重、排序相關(guān)操作技巧與注意事項(xiàng),需要的朋友可以參考下
    2018-07-07
  • mybatis遞歸 一對(duì)多的實(shí)現(xiàn)方法示例

    mybatis遞歸 一對(duì)多的實(shí)現(xiàn)方法示例

    這篇文章主要給大家介紹了關(guān)于mybatis遞歸 一對(duì)多實(shí)現(xiàn)的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2018-08-08
  • 解析Java中的Field類和Method類

    解析Java中的Field類和Method類

    這篇文章主要介紹了Java中的Field類和Method類,是Java入門學(xué)習(xí)中的基礎(chǔ)知識(shí),需要的朋友可以參考下
    2015-12-12
  • Java虛擬機(jī)精選面試題20道

    Java虛擬機(jī)精選面試題20道

    現(xiàn)在面試Java開發(fā)時(shí),基本都會(huì)問(wèn)到Java虛擬機(jī)的知識(shí),根據(jù)職位不同問(wèn)的內(nèi)容深淺又有所區(qū)別。本文整理了10道面試中常問(wèn)的Java虛擬機(jī)面試題,希望對(duì)正在面試的同學(xué)有所幫助
    2021-06-06
  • SpringCloud maven-assembly-plugin 多級(jí)目錄打包的實(shí)現(xiàn)

    SpringCloud maven-assembly-plugin 多級(jí)目錄打包的實(shí)現(xiàn)

    本文主要介紹了SpringCloud maven-assembly-plugin 多級(jí)目錄打包的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-10-10
  • SpringSecurity報(bào)錯(cuò)authenticationManager must be spec的解決

    SpringSecurity報(bào)錯(cuò)authenticationManager must be 

    這篇文章主要介紹了SpringSecurity報(bào)錯(cuò)authenticationManager must be spec的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-11-11
  • 詳解Java的位運(yùn)算

    詳解Java的位運(yùn)算

    這篇文章主要介紹了詳解Java的位運(yùn)算,程序中的所有數(shù)在計(jì)算機(jī)內(nèi)存中都是以二進(jìn)制的形式儲(chǔ)存的。位運(yùn)算就是直接對(duì)整數(shù)在內(nèi)存中的二進(jìn)制位進(jìn)行操作,需要的朋友可以參考下
    2023-04-04

最新評(píng)論

南投市| 凌源市| 黄冈市| 松溪县| 文登市| SHOW| 吴旗县| 金沙县| 乾安县| 沙湾县| 监利县| 饶平县| 大荔县| 井研县| 东乌珠穆沁旗| 灌阳县| 乌苏市| 苏尼特左旗| 澄迈县| 乐业县| 罗甸县| 前郭尔| 井陉县| 本溪| 长沙市| 姜堰市| 南召县| 万山特区| 达拉特旗| 宿迁市| 于田县| 柳州市| 浙江省| 台东县| 当雄县| 江北区| 抚顺市| 庆城县| 漳州市| 满洲里市| 宜良县|