Class 为强制扩展标记Haxe类?
类声明是否有一个编译器元,它在扩展类实例之前阻止创建类实例?换句话说-某种程度上与Class 为强制扩展标记Haxe类?,class,inheritance,haxe,Class,Inheritance,Haxe,类声明是否有一个编译器元,它在扩展类实例之前阻止创建类实例?换句话说-某种程度上与@:finalmeta相反 像这样(代码的最后一行): 实现这一点的一种方法是创建私有类构造函数: class A { private function new() { // ... } } // ... var a = new A(); // Error: Cannot access private constructor 简单地说,不要为a类声明构造函数其他两个答案都是正确的
@:final
meta相反
像这样(代码的最后一行):
实现这一点的一种方法是创建私有类构造函数:
class A {
private function new() {
// ...
}
}
// ...
var a = new A(); // Error: Cannot access private constructor
简单地说,不要为a类声明构造函数其他两个答案都是正确的(没有构造函数或私有构造函数),但您可能会对以下几个细节感兴趣:
- 这里没有构造函数。需要注意的是,
根本没有构造函数,A
根本没有调用B
。除此之外,其他一切都如你所料super()
- 下面是一个私有构造函数的示例。您仍然无法实例化
,但仍然需要从新的a()
的构造函数调用B
super()
- 使用某些功能(如成员变量的默认值)将导致
自动获取隐式构造函数。别担心,这不会影响可构造性,也不会影响是否需要调用a
。但是要知道它就在那里,如果必要的话,在super()
的构造函数前面会有一个隐式的B
调用。请参阅JS输出以验证这一点super()
- 在任何情况下,您都可以在运行时使用
var A=Type.createInstance(A,[])实例化
代码>作为编译时类型检查没有限制A
1.不要混淆,这是一个完全不同的话题。 2.不要与虚拟函数混淆,wikipedia将其视为一个可以覆盖的函数(尽管不同语言的各种文档对这个高负载术语的描述不同)
class A {
private function new() {
// ...
}
}
// ...
var a = new A(); // Error: Cannot access private constructor