类作为Java中的变量

类作为Java中的变量,java,class,variables,Java,Class,Variables,我一直在看一些代码,我想知道是否有人可以解释这是如何工作的,例如 public class DataTable { } 然后在另一个类中使用它 public class UsingDatatable { public DataTable checktables = null; } 为什么另一个类使用另一个类作为变量?这称为组合,旨在利用另一个类的字段和方法。 有关更多详细信息,请参阅 在计算机科学中,对象组合是一种将简单对象或数据类型组合成更复杂对象的方法。组合是许多基本数据结构的

我一直在看一些代码,我想知道是否有人可以解释这是如何工作的,例如

public class DataTable {

}
然后在另一个类中使用它

public class UsingDatatable {
    public DataTable checktables = null;
}

为什么另一个类使用另一个类作为变量?

这称为组合,旨在利用另一个类的字段和方法。 有关更多详细信息,请参阅

在计算机科学中,对象组合是一种将简单对象或数据类型组合成更复杂对象的方法。组合是许多基本数据结构的关键构建块,包括标记联合、链表和二叉树,以及面向对象编程中使用的对象

例如:

public class Main {
    void aMethod(int a) {
        Useful u = new Useful();
        int c = u.usefulMethod(Useful.MYCONST, a);
    }
}

class Useful {
    public final static int MYCONST = 10;
    public int usefulMethod(int i, int j) {
        return i * j;
    }
}


为了更具体地说明您的问题(这似乎是对象组合概念的一个示例),
UsingDatatable
正在创建一个
Datatable
的对象来使用它(尽管它似乎是一个空类,但实际上它总是包含有用的东西)。

所有变量必须:

  • 包含基元值,或
  • 引用类的实例

在您的示例中,
checktables
引用了
DataTable
类的一个实例(而不是类本身)。

这是一个has-a关系,也称为组合。在本例中,
UsingDatatable
有一个
DataTable
。下面的示例将帮助您更好地理解这个概念

public class Address{
    private String houseNo;
    private String streetNo;
}

public class Person{
    private Address address = null;
}

本例说明
人员
有一个
地址

假设您的意思是为什么使用DataTable类可以创建DataTable类的实例,原因有很多

  • 首先,DataTable可以访问该类。这可能是因为它们共享同一个包,或者使用DataTable“导入”DataTable类

  • 其次,它可以实例化,因为它不是最终的。因此,每个实例(对象)都继承 实现的所有非静态属性可供以后使用

  • 第三,即使不在其中创建构造函数,也可以从中构造对象,除非contsructor声明为private(Java编译器将默认创建公共构造函数)

  • 第四,为什么DataTable对象在UsingDataTable中声明为字段取决于实现者。但是,在所有情况下,每个UsingDataTable对象都有自己的checktable字段副本