Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何从java中的另一个类访问对象?_Java - Fatal编程技术网

如何从java中的另一个类访问对象?

如何从java中的另一个类访问对象?,java,Java,如何从另一个java文件访问对象 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

如何从另一个java文件访问对象

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.
}

为什么在类2中无法访问obj.property?

要访问位于不同类中的字段,需要使用点表示法。在这种情况下,要访问
obj
字段,需要使用
Class1
的实例

Class1 c1 = new Class1();
//Code to instantiate all the variables, etc.
System.out.println(c1.obj.property);
上面的代码假设
属性
Classx
中的一个字段

如果将
obj
字段声明为
static
,则可以使用类本身而不是实例来访问它:

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

实际上,像这样的字段通常被声明为私有的,在这种情况下,可能会提供一个访问器方法来访问它。

好的,一件事是你不能在类定义中运行任意一行代码(System.out.println),所以你的例子是无效的

obj
是Class1中的“实例变量”-类2需要引用Class1的对象才能访问该实例的“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
未声明为公共,实际上没有提供任何修改器,因此它具有默认的访问权限,即package,因此Class1和Class2需要位于同一个包中,以允许使用
anObj.obj

私有对象

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


公共对象

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


静态公共对象

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


请显示
Class2
定义。