簡體   English   中英

如何從 java 中的另一個 class 訪問 object?

[英]How do I access an object from another class in java?

如何從另一個 java 文件訪問 object?

Class1.java:

public class Class1 {
Classx obj = new Classx(); //Classx is another public class, in another file, i'm just making an object in Class1.
}

Class2.java:

public class Class2{
    System.out.println(obj.property); // this doesn't work.
}

為什么在 Class2 中無法訪問 obj.property?

好吧,一件事是您不能在 class 定義中運行任意代碼行(System.out.println),因此您的示例無效。

obj是 Class1 中的“實例變量”——Class 2 需要引用Class1 的 object 才能訪問該實例的“obj”成員。

// in Classx.java
public class Classx {
}

// in Class1.java
public class Class1 {
    Classx obj = new Classx();
}

// in Class2.java
public class Class2 {
    Class1 anObj = new Class1();
    public void showIt() {
        System.out.println(anObj.obj);
    }
}

// in TestProg.java
public class TestProg {
    public static void main(String... args) {
        Class2 two = new Class2();
        two.showIt();
    }
}

由於 Class1 中的obj未聲明為public ,實際上沒有給出修飾符,因此它具有默認訪問權限package ,因此 Class1 和 Class2 需要在同一個 package 中才能允許使用anObj.obj

私有對象

public class Class1 
{
  //...
  Classx obj = new Classx();
  //...
  public Classx getClassx()
  {
    return obj;
  }
}

public class Class2
{
  //...
   Class1 c1 = new Class1();
   System.out.println(c1.getClassx().property);
}

公共對象

public class Class1 
{
  public Classx obj = new Classx();
  //...
}

public class Class2
{
  //...
   Class1 c1 = new Class1();
   System.out.println(c1.obj.property);
}

Static 公共對象

public class Class1 
{
  //...
  public static Classx obj = new Classx();
  //...
 }

public class Class2
{
  System.out.println(Class1.obj.property);
}

為了訪問位於不同 class 中的字段,您需要使用點表示法。 在這種情況下,要訪問obj字段,您需要使用Class1的實例。

Class1 c1 = new Class1();
//Code to instantiate all the variables, etc.
System.out.println(c1.obj.property);

上面的代碼假設propertyClassx中的一個字段。

如果obj字段被聲明為static ,您將能夠使用 class 本身而不是實例來訪問它:

System.out.println(Class1.obj.property);

在實踐中,像這樣的字段通常被聲明為private ,在這種情況下,可以提供訪問器方法來訪問它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM