07-08、構造方法基本概念:重寫init方法
在OC中init開頭的方法, 我們稱之為構造方法
構造方法的用途: 用於初始化一個物件, 讓某個物件一建立出來就擁有某些屬性和值
重寫init方法, 在init方法中初始化成員變數
注意: 重寫init方法必須按照蘋果規定的格式重寫, 如果不按照規定會引發一些未知的錯誤
1.必須先初始化父類, 再初始化子類
2.必須判斷父類是否初始化成功, 只有父類初始化成功才能繼續初始化子類
3.返回當前物件的地址
#import "Person.h"
@implementation Person
/*
第一種寫法:
- (instancetype)init
{
// 1.初始化父類
// 只要父類初始化成功 , 就會返回對應的地址, 如果初始化失敗, 就會返回nil
// nil == 0 == 假 == 沒有初始化成功
self = [super init];
// 2.判斷父類是否初始化成功
if (self != nil) {
// 3.初始化子類
// 設定屬性的值
_age = 6;
}
// 4.返回地址
return self;
}
*/
/*
第二種寫法:
- (instancetype)init
{
self = [super init]; // self == nil == 0
if (self) {
// 初始化子類
_age = 6;
}
return self;
}
*/
//第三種寫法:常用的寫法
- (instancetype)init
{
// self = [super init];
// 注意: 不要把 = 號寫為 ==
// 一定要將[super init]的返回值賦值給self
if (self = [super init]) {
// 初始化子類
_age = 6;
}
return self;
}
@end
例子:
Person.m
#import "Person.h"
@implementation Person
- (instancetype)init
{
if (self = [super init]) {
_age = 10;
}
return self;
}
- (NSString *)description
{
return [NSString stringWithFormat:@"age = %i", _age];
}
@end
Studnet.m
#import "Studnet.h"
@implementation Studnet
- (instancetype)init
{
if (self = [super init]) {
//注意:這裡不能直接訪問父類的_age屬性,因為被@property生成的成員變數是私有變數(和private不同的)只能在自己的那個類中可見和訪問,才其他類中不可見,更不能直接訪問了。所以這裡想給_age賦值可以用self呼叫_age的setter方法。
// [self setAge:10];不過這裡不用呼叫setter方法因為super就是父類,父類中已經初始化_age了
_no = 1;
}
return self;
}
- (NSString *)description
{
return [NSString stringWithFormat:@"age = %i , no = %i", [self age], _no];
}
@end
相關文章
- python繼承和重寫init方法Python繼承
- python繼承和重寫init方法--例項Python繼承
- 或許你並不需要重寫 init(from:) 方法
- 構造方法構造方法
- 方法重寫
- 重寫equals()方法時,需要同時重寫hashCode()方法
- Java--構造器和構造方法Java構造方法
- C++ 構造方法C++構造方法
- 方法重寫(Override)IDE
- java 方法重寫概念Java
- 建議重寫equals方法時也一併重寫hashCode方法
- Java重寫equals方法時為什麼要重寫hashcode方法Java
- Java中方法重寫與方法過載Java
- 程式碼重構之法——方法重構分析
- java之方法的重寫Java
- java——繼承遇到構造方法Java繼承構造方法
- 靜態程式碼塊、構造程式碼塊、構造方法構造方法
- Go 之基礎速學 (十三) golang 裡包的特殊使用和 init () 構造方法的使用Golang構造方法
- java方法的神奇修改(重寫)Java
- 【iOS】category重寫方法的呼叫iOSGo
- 樹形資料構造的方法
- 理解 sole() 查詢構造器方法
- Java 中 String 的構造方法Java構造方法
- 【Objective-C】11-構造方法Object構造方法
- 01 #### `__new__` ,構造方法,建立物件構造方法物件
- 重寫Object.equals()方法和Object.hashCode()方法Object
- .NET重構(型別碼的設計、重構方法)型別
- JavaBean重寫Object類中的方法JavaBeanObject
- 方法重置和重寫的區別
- PHP中的構造方法和析構方法你知道怎麼用了嗎?PHP構造方法
- Python中_init_() 方法Python
- Effective Java - 靜態方法與構造器Java
- java構造方法-this關鍵字的用法Java構造方法
- java之繼承中的構造方法Java繼承構造方法
- 繼承中構造方法的特點繼承構造方法
- Java 面試題關於方法的重寫Java面試題
- 複習java面對物件(方法重寫)Java物件
- 00 #### `__init__` ,初始化方法