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_Oop - Fatal编程技术网

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

Java 我们可以在另一个类的构造函数的帮助下初始化一个对象吗?,java,oop,Java,Oop,我们可以在另一个类的构造函数的帮助下初始化一个对象吗 class1 object = new class2(); 只要class2扩展(或者在接口的情况下实现)class1就可以了。例如,List List=newarraylist() 为了清楚起见,您正在创建class2(或者我的示例中的ArrayList)的实例。恰好您已经声明了变量的类型为class1(或List)。仅就C++而言:这是可能的,但类需要多态的“is a”关系(C++中的公共继承)。例如: class class1 { }

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

class1 object = new class2();

只要
class2
扩展(或者在接口的情况下实现)
class1
就可以了。例如,
List List=newarraylist()


为了清楚起见,您正在创建
class2
(或者我的示例中的
ArrayList
)的实例。恰好您已经声明了变量的类型为
class1
(或
List
)。

仅就C++而言:这是可能的,但类需要多态的“is a”关系(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));
class1{};
类别2:公共类别1
{
类别2(int){}
};
class1*object1=新的class2(42);//需要一个指针(在C++中)
删除object1;
//最好是:
std::unique_ptr object1(新类2(42));
编辑: 与此同时,线程开启器删除了C++标记,因此我的答案不再有任何相关性

class class1{}
class class2 extends class1{}
如果类层次结构中存在父子关系,那么这根本不是问题。 然后
class1 object1=newclass2()是有效的
实际上,内部发生的事情是,您有一个class2对象,但它被一个class1变量引用

但是如果你喜欢

class class1{}
class class2{}

那么这是不起作用的

只有当class2是class1的子类时才有可能。 这就是所谓的多态性

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


class Class2 extends Class1{
 /*
  *
  *
  body of class2
  *
  */
 }
然后你可以申报

Class1 object1=新的Class2()


希望这有帮助。

这是在C中工作的唯一方法++

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

struct class1
{
  class1(const class2*);
};
这是否构成使用类的构造函数来“帮助”构造另一个类的对象,取决于帮助构造的含义

如果你是说

class1 object1 = class2();
然后,转换构造函数需要按值或引用获取
class2
。比如说,

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

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

是。最好选择一种语言。当您需要一些高级行为,但不关心实现细节时,这很有用。例如,您的API可能会公开一个函数,该函数将
Map
作为参数,但您不关心该参数是
HashMap
还是
TreeMap
。最好尽可能将类型声明为泛型,因为这有助于将解耦、代码可读性和维护(重构)融为一体。