superjava,superjava關鍵字

本文目錄一覽:

java中Super是什麼意思?

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

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

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

構造器和方法,都用關鍵字super指向超類,但是用的方法不一樣。

方法用這個關鍵字去執行被重載的超類中的方法。

看下面的例子:

class

Mammal

{

void

getBirthInfo()

{

System.out.println(“born

alive.”);

}

}

class

Platypus

extends

Mammal

{

void

getBirthInfo()

{

System.out.println(“hatch

from

eggs”);

System.out.print(“a

mammal

normally

is

“);

super.getBirthInfo();

}

}

在上面的例子中,使用super.getBirthInfo()去調用超類Mammal中被重載的方法。

構造器使用super去調用超類中的構造器。而且這行代碼必須放在第一行,否則編譯將出錯。看下面的例子:

public

class

SuperClassDemo

{

SuperClassDemo()

{}

}

class

Child

extends

SuperClassDemo

{

Child()

{

super();

}

}

在上面這個沒有什麽實際意義的例子中,構造器

Child()包含了

super,它的作用就是將超類中的構造器SuperClassDemo實例化,幷加到

Child類中。

回答完畢,不知道你明白了沒有

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中的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就先要說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和this的用法和作用

super是調用父類的構造函數

使用super調用有一些限制條件,不能在super調用中使用實例變數作為參數.

而且在構造函數中,調用必須寫在繼承類的構造函數定義的第一行,不能在構造函數的後面使用.

this調用的同類的構造函數.

super的限制條件同樣適用於this函數

一個構造函數定義中不能同時包括this調用和super調用,如果想同時包括的話,可以在this中首先進行super調用.

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

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-04 10:27
下一篇 2024-12-04 10:27

相關推薦

  • 如何查看Python關鍵字

    Python是一種高級編程語言,具有很多有用的特性和優勢。在Python中,關鍵字被用於標識特定的語法結構。如果您正在學習Python編程,了解Python的關鍵字是非常重要的。在…

    編程 2025-04-29
  • Python類定義關鍵字解析

    在Python中,類定義是代碼的重要組成部分。它允許程序員定義包含數據和函數的新類型。類定義的關鍵字在Python中是具有重要性的,它們包括class、def、self、__ini…

    編程 2025-04-27
  • Java final關鍵字詳解

    一、final關鍵字介紹 final是Java中一個非常重要的關鍵字,用來標識一個最終的變數、方法或類。 當一個變數被final修飾時,意味著一旦它被賦值,它的值將不能再改變。當一…

    編程 2025-04-25
  • 如何使用定義類的關鍵字

    一、什麼是定義類的關鍵字 在編程中,定義類的關鍵字是用來聲明並定義一個類的,類是將數據和函數封裝在一起形成的一種類型,通過類來實例化對象。在Python程序中,定義類的關鍵字是 c…

    編程 2025-04-25
  • Python 關鍵字參數的詳細闡述

    Python 是一種高級編程語言,在該語言中,使用關鍵字參數可以使得編寫的程序更加具有可讀性和可維護性。本文將從以下幾個方面對 Python 關鍵字參數進行詳細闡述。 一、定義關鍵…

    編程 2025-04-24
  • SQL關鍵字執行順序詳解

    在SQL語句的執行過程中,關鍵字的執行順序是非常重要的,因為它能決定查詢結果的正確性、效率和可讀性。本文將從多個方面對SQL關鍵字執行順序進行詳細的闡述。 一、SELECT語句中關…

    編程 2025-04-23
  • c++ override關鍵字詳解

    一、override關鍵字是什麼? override關鍵字,是C++11標準引進的一種新特性,它可以用來強制子類重寫父類虛函數。在子類中使用override關鍵字,聲明子類中的函數…

    編程 2025-04-22
  • 探究native關鍵字

    一、native關鍵字的作用 在Java中,native關鍵字用來表示該方法的實現是由外部編寫的語言(如C、C++)實現的。也就是說,Java虛擬機調用該方法時會轉向外部語言的實現…

    編程 2025-04-20
  • 理解extern關鍵字作用的多個方面

    一、變數定義與聲明 extern一般用於變數或函數的聲明,主要的作用是告訴編譯器這個變數或函數已經在別的地方定義了,在此處只需要聲明即可。具體用法為: /*在main.c文件中*/…

    編程 2025-04-12
  • Python的關鍵字

    一、Python是什麼 Python是一種高級編程語言,它具有清晰簡單的語法和強大的標準庫,被廣泛應用於科學計算、Web開發、數據分析、人工智慧等領域。 二、Python的關鍵字 …

    編程 2025-02-17

發表回復

登錄後才能評論