2 mazhibinit mazhibinit 于 2016.09.20 22:23 提问

Swift的构造函数为什么需要设计指定构造函数/便利构造函数,以及构造函数的继承?

Swift的构造函数为什么需要设计指定构造函数,便利构造函数,构造函数的继承,这些概念?而且Swift很看重中几个概念,还有专门的关键字override和convenience来修饰,这种设计有什么好处?能处理什么问题?和Java中的传统设计,其先进的地方在哪里?

1个回答

caozhy
caozhy   Ds   Rxr 2016.09.20 22:33

convenience允许你通过包装一个现有的构造函数得到一个新的构造函数,它的设计动机和设计模式的外观类似,在不改变底层实现的情况下,给调用者提供一个简单的调用。
override允许你重写派生类的构造函数,并且在其中调用基类的构造函数,这样可以避免代码的重复,让派生类有扩展代码的能力。
http://www.csdn.net/article/2015-01-07/2823458-init-keywords

mazhibinit
mazhibinit 您这是说了这两个关键字的作用。Java中,也可以重写父类的构造函数,也可以调用自己的构造函数,只是不需要加上convenience和override,还有就是Java没有构造函数继承。我好奇的是swift这种设计额外的好处在哪里
接近 2 年之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
Swift基础3.3——便利构造函数
关于便利构造函数,在实际开发中,可以对已有类的构造函数进行扩展,利用便利构造函数,简化对象的创建。
Swift之便利构造函数
1.默认情况下,所有的构造方法都是指定构造函数 Designated,那么什么是所谓的便利构造函数呢? 由convenience关键字修饰的构造方法就是便利构造函数. 2.便利构造函数的特点? a.可以返回nil b.只有便利构造函数中可以调用 self.init() c.便利构造函数不能被重写或者super 如下面例子; /// `便利构造函数` /// /// -
swift 构造函数 与便利构造函数
class man { var name : String init (name: String){ self.name = name } }//继承自man class xiaoming:man { var age : NSInteger init(name: String , age:NSInteger) { //这里属性
Swift——convenience(便利构造函数)和类方法
import UIKit extension UIButton{ //swit中类方法是以class开头的方法,类似于oc中+开头的方法 class func createButton(imageName:String,bgImageName:String)->UIButton{ let btn=UIButton() b
Swift4.0 便利构造函数的写法
在UIButton 类扩展中添加新的便利构造函数如下: extension UIButton { convenience init(composeForeImageName:String,composeBackImageName:String){ self.init() setImage(UIImage.init(named: composeFo
构造函数继承.关于java
构造函数继承构造函数继承构造函数继承构造函数继承构造函数继承构造函数继承构造函数继承构造函数继承构造函数继承
Swift-构造函数(一)
------ 知之博客 期待与您交流! ------- - 构造函数           构造函数:构造函数是一种特殊的函数,主要用来在创建对象时初始化对象,为对象成员变量设置初始值。         Swift中是支持函数重载的,所有的构造函数命都是init,虽然OC是不支持重载的,但是OC支持构造函数,OC中的构造函数是initWithXXX。        构造函数的作用:分
组合继承第6.3.3讲为什么修复构造函数指向
function SuperType(name){ this.name = name; this.colors = ["red", "blue", "green"]; } SuperType.prototype.sayName = function(){ alert(this.name); }; function SubType(name, age){ //继承属性...
c++之派生类的构造函数与析构函数问题
1对于c++的派生类的构造函数来说,派生类对象的构造分为两部分,一类是对基类的构造(初始化),这个初始化可以通过偷偷地调用基类相应的构造函数(默认构造函数,或者有参构造函数等)2另一类是对新增成员的构造,也称之为初始化。3所以,在构建一个派生类对象时总是先对基类进行初始化,再接着对派生类新增的成员函数进行初始化。4在析构时,情况完全相反。先析构新增成员,后析构继承过来的基类。#include &l...
构造函数能否被继承,为什么?
不能,因为子类继承父类的时候,先运行父类构造函数;具体的说就是运行父类时就会先“调用”父类的构造函数,注意“调用”和继承不是一个含义,实质上是“自动运行”。 继承(extends)的含义其实是实现一种“扩展”,子类完全没必要扩展父类的构造函数,因为反正每次调子类的时候都会“自动运行”它父类的构造函数,如果真的需要子类构造函数特殊的形式,子类直接修改或重载自己的构造函数就好了。 估计是你对“