第03天OC語(yǔ)言(09):繼承其它特性

  • 不要等到明天,明天太遙遠(yuǎn),今天就行動(dòng)。
須讀:看完該文章你能做什么?

知道繼承的特性(調(diào)用方法順序)

學(xué)習(xí)前:你必須會(huì)什么?(在這里我已經(jīng)默認(rèn)你具備C語(yǔ)言的基礎(chǔ)了)

什么是繼承

注:(小白直接上手)

一、本章筆記
 一.
  如果子類(lèi)中 有父類(lèi)中同名的方法,那么我們稱之為方法重寫(xiě)
  注意: 繼承中的方法調(diào)用順序, 如果自己有 就調(diào)用自己的,如果自己沒(méi)有調(diào)用父類(lèi)的
  **方法的調(diào)用順序, 先自己再父類(lèi), 如果父類(lèi)中沒(méi)有 再找爺爺類(lèi),如果爺爺類(lèi)再?zèng)]有 就找 爺爺?shù)陌职诸?lèi)
      如果一直找到 NSObject類(lèi)沒(méi)有找到, 那么就會(huì)報(bào)錯(cuò)
     Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[IPhone signalWithNumber:]: unrecognized selector sent to instance 0x1002000b0'
 二.
  在繼承中除了 對(duì)象方法可以重寫(xiě),類(lèi)方法也可以重寫(xiě)
 三.
  注意 : 在繼承中方法可以重寫(xiě),但是屬性(成員變量)不能重寫(xiě)

 四.
 繼承:
    當(dāng)B類(lèi) 繼承 A類(lèi), 那么B類(lèi) 就擁有 A類(lèi)所有的屬性和方法(類(lèi)方法/對(duì)象方法)
 優(yōu)點(diǎn):
     提高代碼的復(fù)用性(重復(fù)的代碼)
     可以讓類(lèi)與類(lèi)之間產(chǎn)生關(guān)系,正是因?yàn)? 繼承讓類(lèi)與類(lèi)之間 產(chǎn)生了關(guān)系 所以才有了多態(tài)
 缺點(diǎn):
     耦合性太強(qiáng)(依賴性太強(qiáng)) 也就是說(shuō) 比如有一天我的Phone類(lèi)刪掉了,那么其他的子類(lèi)就不能使用了
 
 注意:
     不要以為繼承可以提高代碼的復(fù)用性, 以后但凡發(fā)現(xiàn)多個(gè)類(lèi)當(dāng)中 有重復(fù)代碼 就抽取一個(gè)父類(lèi)
     只有滿足一定的條件 才能使用繼承
     條件 : xxx 是 xxx / 某某某 is a 某某某
 學(xué)生 :
     姓名
     年齡
     數(shù)學(xué)成績(jī)
     語(yǔ)文成績(jī)
     英語(yǔ)成績(jī)
 排行榜:
     數(shù)學(xué)成績(jī)
     語(yǔ)文成績(jī)
     英語(yǔ)成績(jī)
 分?jǐn)?shù)類(lèi):
     數(shù)學(xué)成績(jī)
     語(yǔ)文成績(jī)
     英語(yǔ)成績(jī)
二、code
main.m
#pragma mark 09-繼承其它特性
#pragma mark - 代碼
#import <Foundation/Foundation.h>
#pragma mark 類(lèi)
#import "IPhone.h"
#pragma mark - main函數(shù)
int main(int argc, const char * argv[])
{
    IPhone *p  = [IPhone new];
    [p signalWithNumber:@"10010"];
    [IPhone brand];

    return 0;
}

Phone
>>>.h
#import <Foundation/Foundation.h>
@interface Phone : NSObject
{
    int _cpu;
}
// 打電話
- (void)signalWithNumber:(NSString *)number;
// 發(fā)短信
- (void)sendMessageWithNumber:(NSString *)number andContent:(NSString *)content;
// 打印品牌信息
+ (void)brand;
@end
>>>.m
#import "Phone.h"

@implementation Phone
- (void)signalWithNumber:(NSString *)number
{
    NSLog(@"利用手機(jī)打電話給%@",number);
}
- (void)sendMessageWithNumber:(NSString *)number andContent:(NSString *)content
{
    NSLog(@"利用手機(jī)發(fā)短信給%@,內(nèi)容是%@",number,content);
}
+ (void)brand
{
    NSLog(@"品牌");
}
@end
iPhone
>>>.h
#import <Foundation/Foundation.h>
#import "Phone.h"

@interface IPhone : Phone
{
    // 注意 : 在繼承中方法可以重寫(xiě),但是屬性(成員變量)不能重寫(xiě)
//    int _cpu; // duplicate member 'cpu'
}
- (void)setCpu:(int)cpu;
- (int)cpu;

// 打電話
// 如果子類(lèi)中 有父類(lèi)中同名的方法,那么我們稱之為方法重寫(xiě)
// 注意: 繼承中的方法調(diào)用順序, 如果自己有 就調(diào)用自己的,如果自己沒(méi)有調(diào)用父類(lèi)的
// 方法的調(diào)用順序, 先自己再父類(lèi), 如果父類(lèi)中沒(méi)有 再找爺爺類(lèi),如果爺爺類(lèi)再?zèng)]有 就找 爺爺?shù)陌职诸?lèi)
// 如果一直找到 NSObject類(lèi)沒(méi)有找到, 那么就會(huì)報(bào)錯(cuò)
//Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[IPhone signalWithNumber:]: unrecognized selector sent to instance 0x1002000b0'
- (void)signalWithNumber:(NSString *)number;

// 在繼承中除了 對(duì)象方法可以重寫(xiě),類(lèi)方法也可以重寫(xiě)
+ (void)brand;

@end
>>>.m
#import "IPhone.h"

@implementation IPhone
- (void)setCpu:(int)cpu
{
    _cpu = cpu;
}
- (int)cpu
{
    return _cpu;
}
- (void)signalWithNumber:(NSString *)number
{
    NSLog(@"利用 iPhone打電話給%@",number);
}
+ (void)brand
{
    NSLog(@"iphone手機(jī)");
}
@end

Android
>>>.h
#import <Foundation/Foundation.h>
#import "Phone.h"
@interface Android : Phone
- (void)setCpu:(int)cpu;
- (int)cpu;
@end
>>>.m
@implementation Android
- (void)setCpu:(int)cpu
{
    _cpu = cpu;
}
- (int)cpu
{
    return _cpu;
}

@end

image.png
image.png
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 178,828評(píng)論 25 709
  • 不要等到明天,明天太遙遠(yuǎn),今天就行動(dòng)。 須讀:看完該文章你能做什么? 知道什么是繼承 學(xué)習(xí)前:你必須會(huì)什么?(在這...
    liyuhong閱讀 164評(píng)論 0 0
  • afinalAfinal是一個(gè)android的ioc,orm框架 https://github.com/yangf...
    passiontim閱讀 15,837評(píng)論 2 45
  • 曾經(jīng)幾何,碧如朝露。我還是否記得寒假這個(gè)詞,而今,聽(tīng)起來(lái)卻感覺(jué)有點(diǎn)懷念、傷感,想想自己,應(yīng)該寫(xiě)點(diǎn)東西,分享給遠(yuǎn)方...
    李琬琰閱讀 351評(píng)論 2 2
  • 親愛(ài)的妞,今天你受苦了,昨晚半夜你醒來(lái)跑到媽媽房間說(shuō)好熱,媽媽陪你回你小房間后,安頓好你,睡著前你還輕輕地和媽媽說(shuō)...
    LianaLL閱讀 213評(píng)論 0 0

友情鏈接更多精彩內(nèi)容