首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >泛型类型的初始化器不会很快继承吗?

泛型类型的初始化器不会很快继承吗?
EN

Stack Overflow用户
提问于 2015-12-30 08:01:25
回答 2查看 526关注 0票数 6

这是我的代码:

代码语言:javascript
复制
public class A<T : Any> { 
    public init(n : Int) { 
        print("A")
    } 
} 
public class B : A<Int> {
}
public class C : B {
}
let x = C(n: 123)

这会导致编译失败,并会发出这样的错误:

代码语言:javascript
复制
repl.swift:9:9: error: 'C' cannot be constructed because it has no accessible initializers

可以编译下列代码。

代码语言:javascript
复制
public class A { 
    public init(n : Int) { 
        print("A")
    } 
} 
public class B : A {
}
public class C : B {
}
let x = C(n: 123)

不应该继承指定的泛型类型的初始化器吗?

========Additional Below=======

“超类初始化程序在某些情况下是继承的,但只有在安全和适当的情况下才会继承。有关详细信息,请参阅下面的自动初始化程序继承。“ -苹果公司“Swift编程语言(Swift 2)”iBooks。

还有这个

“但是,如果满足某些条件,超类初始化程序将自动继承。” “假设您为子类中引入的任何新属性提供默认值,则适用以下两条规则:” rules 1“如果您的子类没有定义任何指定的初始化器,则它会自动继承其所有超类指定的初始化器。如果您的子类提供了其所有超类指定初始化器的实现--或者按照规则1继承它们,或者提供自定义实现作为其定义的一部分--那么它将自动继承所有超类指定的初始化器。”

当查看第一段代码时,子类B没有定义任何指定的初始化器,它应该自动继承其所有超类指定的初始化器,那些来自A<Int>.But的子类--实际上它没有--这在我看来似乎是连线的。

EN

回答 2

Stack Overflow用户

发布于 2015-12-30 09:46:19

那怎么样??我尝试使用覆盖代码和super.init,这不是错误,我认为您不必使用泛型类型。

在B类和C类中加入重写init函数,如下所示,

public override init(n:Int) { super.init(n: n) }

票数 1
EN

Stack Overflow用户

发布于 2016-11-17 09:24:17

失败的代码现在编译(从Swift 3开始)。Swift 3语言变化中没有提到这个更改,所以我只能假设这是一个bug。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34525368

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档