javasuper,java super

本文目錄一覽:

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中的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}

JAVA中的super代表什麼意思??

super();表示調用父類的構造方法,只是調用方法,不構造對象。 super.fun();表示調用父類的某方法 在繼承的時候這個方法是肯定被繼承下來的。如果fun()這個方法在子類沒有重寫,那麼super.fun();實際上跟直接調用fun();是一樣的。 如果被重寫了,那麼super.fun();就是重寫前的,fun();就是重寫後的。

Java中super是什麼意思?

super在java的子類中指代父類引用

java中,super的幾種用法:

1、子類的構造函數如果要引用super的話,必須把super放在函數的首位

class Base {

    Base() {

        System.out.println(“Base”);

    }

}

public class Checket extends Base {

    Checket() {

        super();//調用父類的構造方法,一定要放在方法的首個語句

        System.out.println(“Checket”);

    }

 

    public static void main(String argv[]) {

        Checket c = new Checket();

    }

}

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

2、在Java中,有時還會遇到子類中的成員變量或方法與超類(有時也稱父類)中的成員變量或方法同名。因為子類中的成員變量或方法名優先級高,所以子類中的同名成員變量或方法就隱藏了超類的成員變量或方法,但是我們如果想要使用超類中的這個成員變量或方法,就需要用到super.

class Country {

    String name;

 

    void value() {

        name = “China”;

    }

}

 

class City extends Country {

    String name;

 

    void value() {

        name = “Hefei”;

        super.value();//不調用此方法時,super.name返回的是父類的成員變量的值null

        System.out.println(name);

        System.out.println(super.name);

    }

 

    public static void main(String[] args) {

        City c=new City();

        c.value();

    }

}

為了在子類中引用父類中的成員變量name和方法value(),在代碼中使用了super、super.name和super.value(),若不調用super.value()時,super.name返回父類成員變量默認值null,調用此方法時,super.value()方法把成員變量name賦值為China,再利用super.name調用父類的成員變量的值。

另外,要注意的是super.name調用的是成員變量的

class Country {

    String name=”xianfan”;

 

    String value(String name) {

        name = “China”;

        return name;

    }

}

 

class City extends Country {

    String name;

 

    String value(String name) {

        name = “Hefei”;

        super.value(“失敗”);//不調用此方法時,super.name返回的是父類的成員變量的值null

        System.out.println(name);

        System.out.println(super.name);

        return name;

    }

 

    public static void main(String[] args) {

        City c=new City();

        c.value(“成功”);

    }

}

結果為:Hefei

xianfan

此時,super.name返回的值是父類成員變量的值xianfan,而此時的super.value()方法是不起作用的。

3、用super直接傳遞參數:

class Person {

    public static void prt(String s) {

        System.out.println(s);

    }

 

    Person() {

        prt(“A Person.”);

    }

 

    Person(String name) {

        prt(“A person name is:” + name);

    }

}

 

public class Chinese extends Person {

    Chinese() {

        super(); // 調用父類構造函數(1)

        prt(“A chinese.”);// (4)

    }

 

    Chinese(String name) {

        super(name);// 調用父類具有相同形參的構造函數(2)

        prt(“his name is:” + name);

    }

 

    Chinese(String name, int age) {

        this(name);// 調用當前具有相同形參的構造函數(3)

        prt(“his age is:” + age);

    }

 

    public static void main(String[] args) {

        Chinese cn = new Chinese();

        cn = new Chinese(“kevin”);

        cn = new Chinese(“kevin”, 22);

    }

}

結果為:A Person.

A chinese.

A person name is:kevin

his name is:kevin

A person name is:kevin

his name is:kevin

his age is:22

在這段程序中,this和super不再是像以前那樣用「.」連接一個方法或成員,而是直接在其後跟上適當的參數,因此它的意義也就有了變化。super後加參數的是用來調用父類中具有相同形式的構造函數,如1和2處。this後加參數則調用的是當前具有相同參數的構造函數,如3處。當然,在Chinese的各個重載構造函數中,this和super在一般方法中的各種用法也仍可使用,比如4處,你可以將它替換為「this.prt」(因為它繼承了父類中的那個方法)或者是「super.prt」(因為它是父類中的方法且可被子類訪問),它照樣可以正確運行。

java中Super是什麼意思?

Java是一門面向對象編程語言,不僅吸收了C++語言的各種優點,還摒棄了C++里難以理解的多繼承、指針等概念,因此Java語言具有功能強大和簡單易用兩個特徵。Java語言作為靜態面向對象編程語言的代表,極好地實現了面向對象理論,允許程序員以優雅的思維方式進行複雜的編程。

super是引用當前對象的直接父類中的成員(用來訪問直接父類中被隱藏的父類中成員數據或函數,基類與派生類中有相同成員定義時如:super.變量名 super.成員函數據名。

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/184506.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-11-25 17:24
下一篇 2024-11-25 17:24

相關推薦

  • Java JsonPath 效率優化指南

    本篇文章將深入探討Java JsonPath的效率問題,並提供一些優化方案。 一、JsonPath 簡介 JsonPath是一個可用於從JSON數據中獲取信息的庫。它提供了一種DS…

    編程 2025-04-29
  • java client.getacsresponse 編譯報錯解決方法

    java client.getacsresponse 編譯報錯是Java編程過程中常見的錯誤,常見的原因是代碼的語法錯誤、類庫依賴問題和編譯環境的配置問題。下面將從多個方面進行分析…

    編程 2025-04-29
  • Java騰訊雲音視頻對接

    本文旨在從多個方面詳細闡述Java騰訊雲音視頻對接,提供完整的代碼示例。 一、騰訊雲音視頻介紹 騰訊雲音視頻服務(Cloud Tencent Real-Time Communica…

    編程 2025-04-29
  • Java Bean加載過程

    Java Bean加載過程涉及到類加載器、反射機制和Java虛擬機的執行過程。在本文中,將從這三個方面詳細闡述Java Bean加載的過程。 一、類加載器 類加載器是Java虛擬機…

    編程 2025-04-29
  • Java Milvus SearchParam withoutFields用法介紹

    本文將詳細介紹Java Milvus SearchParam withoutFields的相關知識和用法。 一、什麼是Java Milvus SearchParam without…

    編程 2025-04-29
  • Java 8中某一周的周一

    Java 8是Java語言中的一個版本,於2014年3月18日發佈。本文將從多個方面對Java 8中某一周的周一進行詳細的闡述。 一、數組處理 Java 8新特性之一是Stream…

    編程 2025-04-29
  • Java判斷字符串是否存在多個

    本文將從以下幾個方面詳細闡述如何使用Java判斷一個字符串中是否存在多個指定字符: 一、字符串遍歷 字符串是Java編程中非常重要的一種數據類型。要判斷字符串中是否存在多個指定字符…

    編程 2025-04-29
  • VSCode為什麼無法運行Java

    解答:VSCode無法運行Java是因為默認情況下,VSCode並沒有集成Java運行環境,需要手動添加Java運行環境或安裝相關插件才能實現Java代碼的編寫、調試和運行。 一、…

    編程 2025-04-29
  • Java任務下發回滾系統的設計與實現

    本文將介紹一個Java任務下發回滾系統的設計與實現。該系統可以用於執行複雜的任務,包括可回滾的任務,及時恢復任務失敗前的狀態。系統使用Java語言進行開發,可以支持多種類型的任務。…

    編程 2025-04-29
  • Java 8 Group By 會影響排序嗎?

    是的,Java 8中的Group By會對排序產生影響。本文將從多個方面探討Group By對排序的影響。 一、Group By的概述 Group By是SQL中的一種常見操作,它…

    編程 2025-04-29

發表回復

登錄後才能評論