我们可以在另一个类的构造函数的帮助下初始化一个对象吗?

时间:2014-08-03 13:38:29

标签: java oop

我们可以在另一个类的构造函数的帮助下初始化一个对象吗?

class1 object = new class2();

5 个答案:

答案 0 :(得分:3)

只要class2扩展(或在接口的情况下实现)class1就可以了。例如,List<String> list = new ArrayList<>();

要明确的是,您正在创建class2(或我的示例中为ArrayList)的实例。您恰好已将变量声明为class1(或List)类型。

答案 1 :(得分:2)

在C ++中使用它的唯一方法

class1 object1 = new class2();

将在class2*class1之间进行隐式转换。这可以通过转换构造函数来实现:

struct class1
{
  class1(const class2*);
};

这是否构成使用类的构造函数来帮助&#34;构建一个不同的对象取决于你的意思,通过帮助构建。

如果你的意思是

class1 object1 = class2();

然后转换构造函数需要按值或引用取class2。例如,

struct class1
{
  class1(const class2&);
};

类型之间不需要 is-a 关系。

答案 2 :(得分:1)

只说C ++:这是可能的,但是类需要多态“是一种”关系(C ++中的公共继承)。例如:

class class1 { };
class class2 : public class1
{
    class2(int) {}
};


class1* object1 = new class2(42); // A pointer is needed (in C++)
delete object1;

// better would be:
std::unique_ptr<class1> object1(new class2(42));

编辑: 与此同时,线程开启者删除了C ++ - Tag,所以我的答案不再具有任何相关性。

答案 3 :(得分:1)

只有当class2是class1的子类时才有可能。 这称为多态。

class Class1{
 /*
  *
  *
  body of class1
  *
  */
 }


class Class2 extends Class1{
 /*
  *
  *
  body of class2
  *
  */
 }

然后你可以声明

Class1 object1 = new Class2();

希望这有帮助..

答案 4 :(得分:0)

class class1{}
class class2 extends class1{}

如果您在类层次结构中有父子关系,那么它根本不是问题。 然后  class1 object1 = new class2();有效 实际上里面发生的是你有一个class2对象,但是由class1变量引用。

但如果你喜欢

class class1{}
class class2{}

然后这不起作用