欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java中超詳細this與super的概念和用法

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

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

一、this

概念:this代表著當前對象的引用,也是當前函數所屬對象的引用。直白的說,哪個對象調用了當前函數,this就代表哪個對象。

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

  • 最常見的情況是是對象的一個屬性或被構造器的參數屏蔽時,如果需要調用屏蔽的屬性,this就代表哪個對象
  • this只能在方法內使用,表示正在調用方法的那個對象,但是,如果在方法內調用同一個類的另一個方法,就不必使用this,直接調用即可,this關鍵字是能省則省
  • this和static的關系:
  • static方法是類方法,依附于類而不依賴與任何對象,static屬性是指該屬性是類中所有對象所共享的,static方法是類方法,先于任何實例(對象)存在,static在類加載時就已經存在了,但對象是在創(chuàng)建時才生成;方法中使用this關鍵字它的值是當前對象的引用,只能用它調用屬于當前對象的屬性和方法和。但是,this可以調用static類型的屬性,舉個例子:一個父親是不可能向他還未出生的孩子借錢的,但孩子出生后完全可以找他父親去借錢;
  • 對于一個類中的this,不一定單指這個的對象,也可能是這個類的子類的對象(抽象類里面的this只能是實際調用中它的派生類的實例化對象);
  • 總之:如果new 父類對象的話,父類方法的this指向的是父類,如果new 子類,那么父類方法的this指向的是子類
  • this關鍵字也可以用于在構造函數中調用其他構造函數。但是,只能定義在構造函數的第一行,因為初始化動作要先執(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進行標識
 public Person(String name, int age,String nation) {
  this.name = name;
  this.age = age;
  //this可以調用到靜態(tài)屬性
  this.nation = nation;
 }


 public void test(){
  System.out.println("測試");
 }

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

 public void print(){
  //調用類內部的方法(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);
 }
}

結果:

在這里插入圖片描述

二、super

概念:
super可以理解為“父類的”,super可以在子類中調用父類的屬性,方法,構造器,super關鍵字和this一樣能省就省;

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

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

class Student extends Person{
 //這是默認的構造器內容,寫出來是為了幫大家理解
 public Student(){
  super();
 }
}

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

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

class Student extends Person{

 public Student(String name, int age) {
  //任選一個父類有參構造
  //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、子類相應構造創(chuàng)建了一個子類對象,該子類對象還包含了一個父類對象。該父類對象在子類對象內部(正如子類的構造器無論如何都要通過super調用父類構造器一樣,子類的對象被成功構造,那么它的內部就會包含父類的對象),證明如下

子類重寫父類的方法后可以通過super調用到父類的方法

class Student extends Person {
 private String name = "wzh2";

 @Override
 public String getName() {
  return "子類" + name;
 }

 public String getParentName(){
  //調用父類的方法
  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;
 }
}

輸出結果

在這里插入圖片描述

子類獲取到父類的變量

class Student extends Person{

 public void parentDisplay(){
  System.out.println(super.age + super.name);
 }

 public static void main(String[] args) {
  new Student().parentDisplay(); //輸出結果:20wzh
 }
}

public class Person{
 //protected意味著子類和同一包中可以訪問
 protected String name = "wzh";
 protected int age = 20;
} 

調用父類的構造器
不再舉例

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

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

 public void display(){
  //通過this或super調用到了Object的toString();
  System.out.println(super.toString());
 }

 public static void main(String[] args) {
  new Person().display(); //輸出為Person@452b3a41
 }

}

到此這篇關于Java中超詳細this與super的概念和用法的文章就介紹到這了,更多相關javathis與super的概念和用法內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • JAVA實現 SpringMVC方式的微信接入、實現簡單的自動回復功能

    JAVA實現 SpringMVC方式的微信接入、實現簡單的自動回復功能

    這篇文章主要介紹了JAVA實現 SpringMVC方式的微信接入、實現簡單的自動回復功能的相關資料,非常不錯具有參考借鑒價值,需要的朋友可以參考下
    2016-11-11
  • 使用自定義注解實現redisson分布式鎖

    使用自定義注解實現redisson分布式鎖

    這篇文章主要介紹了使用自定義注解實現redisson分布式鎖,具有很好的參考價值,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-02-02
  • 關于RestTemplate的使用深度解析

    關于RestTemplate的使用深度解析

    這篇文章主要介紹了對RestTemplate的深度解析,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-10-10
  • JavaSwing實現小型學生管理系統(tǒng)

    JavaSwing實現小型學生管理系統(tǒng)

    這篇文章主要為大家詳細介紹了JavaSwing實現小型學生管理系統(tǒng),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-02-02
  • idea 配置checkstyle詳細步驟

    idea 配置checkstyle詳細步驟

    checkstyle是提高代碼質量,檢查代碼規(guī)范的很好用的一款工具,本文簡單介紹一下集成的步驟,并提供一份完整的checkstyle的代碼規(guī)范格式文件,以及常見的格式問題的解決方法,需要的朋友可以參考下
    2023-11-11
  • spring?batch線上異常定位記錄

    spring?batch線上異常定位記錄

    這篇文章主要為大家介紹了spring?batch線上異常定位記錄及異常解決,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步早日升職加薪
    2022-03-03
  • Java實現導入導出Excel文件的方法(poi,jxl)

    Java實現導入導出Excel文件的方法(poi,jxl)

    這篇文章主要介紹了Java實現導入導出Excel文件的方法(poi,jxl),本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-08-08
  • Netty + ZooKeeper 實現簡單的服務注冊與發(fā)現

    Netty + ZooKeeper 實現簡單的服務注冊與發(fā)現

    服務注冊和發(fā)現一直是分布式的核心組件。本文介紹了借助 ZooKeeper 做注冊中心,如何實現一個簡單的服務注冊和發(fā)現。,需要的朋友可以參考下
    2019-06-06
  • Nacos注冊中心的部署與用法示例詳解

    Nacos注冊中心的部署與用法示例詳解

    注冊中心是微服務架構中的紐帶,類似于“通訊錄”,它記錄了服務和服務地址的映射關系,本文通過示例代碼給大家介紹Nacos注冊中心的部署與用法,感興趣的朋友跟隨小編一起看看吧
    2022-02-02
  • Java中map內部存儲方式解析

    Java中map內部存儲方式解析

    這篇文章主要介紹了Java中map內部存儲方式解析的相關內容,涉及其實現方式,以及對存儲方式作了簡單的比較,具有一定參考價值,需要的朋友可了解下。
    2017-10-10

最新評論