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
。最好尽可能将类型声明为泛型,因为这有助于将解耦、代码可读性和维护(重构)融为一体。