![](/img/trans.png)
[英]How can I access the member variable of class A outside the method, that has been instantiated in other class?
[英]How can i access one class variable into other
有對單獨的類一類和類兩種 。 這兩個類都在同一包中。 我想將一個類的數據訪問到另一個類中,如何訪問變量數據。 我的程序很長,我只想要這個邏輯。謝謝您。
A.java類
public class A
{
public static void main(String ar[])
{
int a=100;
}
}
B.java類
public class B extends A
{
public static void main(String m[])
{
A obj=new A();
System.out.println("Variable of class A is :"+ obj.a);
}
}
我已經做了這件事來獲取訪問權限,就像我將變量a聲明為Static一樣,這樣我就可以直接獲取訪問權限,但是它不起作用。 當我正在編譯B.java時,它給我錯誤
無法在:= System.out.println(“ A類的變量為:” + obj.a )中找到符號;
和
表達式的非法開頭( 當我將變量a公開化時 )
:-(錯誤)public int a = 100; [A級]。
為什么要使用靜態main方法? 除此之外,字段a
是本地的,在范圍之外不可訪問。 改用它。
public class A
{
public int a;
public A()
{
a=100;
}
}
上面沒有兩個真正的面向對象的類,但是只有兩個用於靜態main方法的容器。 為了很好地結合兩個類中的代碼,您將需要廢棄該代碼並制作兼容OOP的類,並附帶實例字段和方法。 有關更多信息,請查看Java教程的OOP部分: 鏈接到OOP教程 。
首先,擺脫A
的main()
。 您只需要應用程序中的一個 main()
,它就在B
(因為A
中的那個實際上不做任何事情):
public class A {
}
現在,您希望A
具有一個類級別的int
值:
public class A {
private int a;
}
並且您希望它的默認值為100
,是嗎? 構造函數是執行此操作的好地方:
public class A {
private int a;
public A() {
this.a = 100;
}
}
現在,您隨時可以執行以下操作:
A obj = new A();
您將擁有一個帶有值的對象。 為了從該對象外部訪問該值,您需要一個“ getter”:
public class A {
private int a;
public A() {
this.a = 100;
}
public int get_a() {
return this.a;
}
}
現在在B
(或實際上在任何地方),您可以創建A
的實例並使用“ getter”訪問該值:
A obj=new A();
System.out.println("Variable of class A is :"+ obj.get_a());
從語義上講,不要將其視為“從另一個類訪問變量”。 相反,請考慮您的對象是什么以及它們代表什么。 如果它是一個物理的,真實世界的對象,並且內部包含某種價值。
創建該對象的實例時,該實例在內部將在某個位置具有該值。 從該對象的外部 ,內部維護該值並不重要 。 只需有某種接口即可看到其價值。 這就是“ getter”方法的作用。
單線回答:要在類外部訪問變量,請使其成為類級別的。 您編寫了一個方法級別的變量,該變量只能在該范圍(方法)內訪問。
詳細說明:
有分開的第一類和第二類。 這兩個類都在同一包中。 我想將一個類的數據訪問到另一個類中,如何訪問變量數據。
因此,基本上,您知道通過擴展,您應該能夠將父類數據訪問到您的子類中。 為此,只需將父類中的數據作為類級別。
class A {
int var = 10; //class level, but non-static, so to access you need A object
void method() {
int var = 20; //this is method local and can not be accessed outside
}
}
public class B extends A {
public static void main(String[] args) {
A aObj = new A();
System.out.println(aObj.var);
}
}
表達式的非法開頭(當我將變量a公開化時)
它是非法的。 因為訪問修飾符(例如public
, private
等)適用於類級別的東西,例如您看到的class B
類中的第一個var
或main
方法。
表示:您需要立即轉到此處: https : //docs.oracle.com/javase/tutorial/,而在缺少語言基礎知識時,不只是嘗試運行某些類。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.