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

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

Java超類變量在子類之外訪問?

Java超類變量在子類之外訪問?

海綿寶寶撒 2022-07-20 10:11:53
如果我有如下三個類:package com.Bob.Marley;public class SuperClass{     protected int x = 0;}package com.Bob.Marley;public class SubClass extends SuperClass{    protected int x = 1;}package com.Bob.Marley;public class TestClass{    public static void main (String[] args){        SubClass s = new SubClass();        //print 1        System.out.println(s.x);        //how do I print the superclass variable?        //I know inside SubClass I can access it with plain old super.x        //but what about outside the subclass with a new object.     }}所以問題是我如何從在單獨的類中創建的新對象的超類中打印出 0 。System.out.println(s.super.x); 不起作用。我認為它不會改變任何東西,但我使用的是 java 8。
查看完整描述

2 回答

?
慕虎7371278

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

如果您在子類中引入新字段,請不要重復使用父類中的字段名稱。你一無所獲,只有困惑和問題。


如果我理解正確,您希望SubClass實例有兩個字段,一個繼承自SuperClass(為了討論,讓我們將其重命名為superX以使事情更清楚),另一個來自子類本身(讓我們將其重命名為subX)。


對于給定的SubClass實例,您希望能夠訪問這兩個字段,superX并且subX(當然,使用不同的表達式)。在您的代碼示例中使事情變得困難的是,您選擇為它們兩個賦予相同的名稱x。


因此,如果您真的希望您的實例同時攜帶這兩個字段,我建議您重命名它們,這樣您就不必使用諸如強制轉換為SuperClass.


public class SuperClass{

     protected int superX = 0;

}


public class SubClass extends SuperClass{

    protected int subX = 1;

}

但是,如果x對于父類和子類都代表同一個屬性,具有相同的含義,只是初始值不同,那么擁有兩個不同的字段是沒有意義的,您應該將代碼更改為:


public class SuperClass{

     protected int x = 0;

}


public class SubClass extends SuperClass{

    // constructor initializes the x field with 1.

    public SubClass(){

        x = 1;

    }

}

當然,那么不可能從SubClass.


查看完整回答
反對 回復 2022-07-20
?
開心每一天1111

TA貢獻1836條經驗 獲得超13個贊

表達式s.super.x在這里無效。每當你在 a 前面super.x加上一些東西時,它應該是一個類型名,而不是一個變量名,例如SuperClass.super.x. 但是,這僅在用于訪問封閉類的超類的子類內部有效,此處不存在。


轉換x為 aSuperClass以便您可以訪問x聲明的 in Superclass。


System.out.println( ((SuperClass) s).x);

或者


SuperClass sc = (SuperClass) s;

System.out.println(sc.x);

這是有效的,因為變量訪問是靜態綁定的。變量或表達式的類型決定了搜索變量訪問的范圍。


查看完整回答
反對 回復 2022-07-20
  • 2 回答
  • 0 關注
  • 172 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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