第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

關(guān)于java中類嵌套的查詢

關(guān)于java中類嵌套的查詢

ABOUTYOU 2023-08-16 17:27:40
public class Outer{    public class Inner{    }}public class Main {    public static void main(String[] args) {        Outer objOut = new Outer();        //Outer.Inner object1= objOut.new Inner();  // runes without a problem        //objOut.Inner object2= objOut.new Inner(); //gives error    }}這聽起來可能有點業(yè)余,但是,Outer.Inner與objOut.Inner.
查看完整描述

3 回答

?
慕虎7371278

TA貢獻1802條經(jīng)驗 獲得超4個贊

您不能將變量名稱用作另一個變量的類型,而這正是您想要使用的objOut.Inner。變量的類型是Inner(或可選Outer.Inner)。

因為Inner是一個內(nèi)部類,所以它與其外部類的實例(其封閉實例)相關(guān)聯(lián)。當(dāng)您創(chuàng)建它的實例時,您可以選擇指定與它關(guān)聯(lián)的對象實例,這就是您正在使用objOut.new Inner.

這個例子可能會讓它更清楚一些:

public class Example {

? ? private String str;


? ? public class Inner {

? ? ? ? void show() {

? ? ? ? ? ? // Show the string for the Example this Inner is part of

? ? ? ? ? ? System.out.println(Example.this.str);

? ? ? ? }

? ? }


? ? public Example(String s) {

? ? ? ? this.str = s;

? ? }


? ? public static void main(String[] args) {

? ? ? ? Example e1 = new Example("e1");

? ? ? ? Example e2 = new Example("e2");

? ? ? ? Inner i1 = e1.new Inner();

? ? ? ? i1.show(); // "e1"

? ? ? ? Inner i2 = e2.new Inner();

? ? ? ? i2.show(); // "e2"

? ? }?

}


請注意該i1?Inner實例如何獲取e1其封閉Example實例,因此看到e1s?str,但又如何i2獲取e2其封閉實例,因此它看到e2s?str


有時候它不是可選的,例如在我Example上面的類中,因為new Inner使用了 where ,所以沒有可以使用的默認實例。它在 的實例方法中是可選的Example,但在該static方法中不是可選的。


查看完整回答
反對 回復(fù) 2023-08-16
?
一只斗牛犬

TA貢獻1784條經(jīng)驗 獲得超2個贊

兩者都不能編譯。

為了使前者編譯,應(yīng)該聲明一個變量,并給出該變量的名稱。

Outer.Inner?obj?=?objOut.new?Inner();

即使您執(zhí)行此步驟,后者也不會編譯,因為它既objOut.Inner不是類型(因為主表達式objOut不是類型)也不是有效名稱(因為在標(biāo)識符 (jls-3.8).中不允許使用)。

針對您的情況的簡化規(guī)則(jls-14.4)是

LocalVariableType?VariableDeclaratorId?[=?VariableInitializer];


查看完整回答
反對 回復(fù) 2023-08-16
?
GCT1015

TA貢獻1827條經(jīng)驗 獲得超4個贊

這個 :

Outer.Inner = objOut.new Inner();

不會編譯,但如果你將其更改為:

Outer.Inner object = objOut.new Inner();

將意味著創(chuàng)建一個引用類的內(nèi)部類實例Outer-objOut將是Outer類的實例。

還有這個:

objOut.Inner = objOut.new Inner();

不會編譯,因為objOut該類的實例Outer沒有 poperty Inner。

并不是Outer類知道類的實例Inner,而是Inner類實例知道Outer創(chuàng)建它的類實例。

編輯

該行:

objOut.Inner object2= objOut.new Inner();

將無法編譯,因為Inner類型標(biāo)識符屬于Outer 而不是此類的實例。


查看完整回答
反對 回復(fù) 2023-08-16
  • 3 回答
  • 0 關(guān)注
  • 215 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號