亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

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

關于java中類嵌套的查詢

關于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    }}這聽起來可能有點業余,但是,Outer.Inner與objOut.Inner.
查看完整描述

3 回答

?
慕虎7371278

TA貢獻1802條經驗 獲得超4個贊

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

因為Inner是一個內部類,所以它與其外部類的實例(其封閉實例)相關聯。當您創建它的實例時,您可以選擇指定與它關聯的對象實例,這就是您正在使用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方法中不是可選的。


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

TA貢獻1784條經驗 獲得超2個贊

兩者都不能編譯。

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

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

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

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

LocalVariableType?VariableDeclaratorId?[=?VariableInitializer];


查看完整回答
反對 回復 2023-08-16
?
GCT1015

TA貢獻1827條經驗 獲得超4個贊

這個 :

Outer.Inner = objOut.new Inner();

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

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

將意味著創建一個引用類的內部類實例Outer-objOut將是Outer類的實例。

還有這個:

objOut.Inner = objOut.new Inner();

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

并不是Outer類知道類的實例Inner,而是Inner類實例知道Outer創建它的類實例。

編輯

該行:

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

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


查看完整回答
反對 回復 2023-08-16
  • 3 回答
  • 0 關注
  • 200 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號