#import "ViewController.h"
#import "Automobile.h"
#import "CarK2000.h"
#import "CarDeLorean.h"
@interface ViewController ()
@end
@implementation ViewController
- (void)viewDidLoad
{
// 親クラス側の処理 UIViewControllerクラス
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
}
- (void)didReceiveMemoryWarning
{
// 親クラス側の処理 UIViewControllerクラス
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
// [標準イニシャライザ]ボタンを押した時
- (IBAction)proc01:(id)sender{
// ViewController → Automobile データ転送
// オブジェクト生成(インスタンス化、実体化)
Automobile *am = [[Automobile alloc] init]; // 標準的なイニシャライザ
// Automobile *am = [Automobile new];
// 車名:Automobile.h @property (weak, nonatomic) NSString *carName;
am.carName = @"プリウス";
// 排気量:@property (assign, nonatomic) int carHaikiryou;
am.carHaikiryou = 1600;
// インスタントメソッド
[am runCar];
[am stopCar];
// +クラスメソッド 曲がる そのまま呼び出すことができる
// 引数を持てない
[Automobile turnCar];
// オブジェクト解放
// [am release];
}
// [指定イニシャライザ]ボタンを押した時
- (IBAction)proc02:(id)sender{
// オブジェクト生成(インスタンス化、実体化)
Automobile *am = [[Automobile alloc] initWithCarName:@"ミラージュ"];
[am runCar];
}
// [複数インスタンス]ボタンを押した時
- (IBAction)proc03:(id)sender{
// オブジェクト生成(インスタンス化、実体化)
Automobile *am01 = [[Automobile alloc] init]; // 標準的なイニシャライザ
// 車名:@property (weak, nonatomic) NSString *carName;
am01.carName = @"ブルーバード";
// オブジェクト生成(インスタンス化、実体化)
Automobile *am02 = [[Automobile alloc] init]; // 標準的なイニシャライザ
// 車名:@property (weak, nonatomic) NSString *carName;
am02.carName = @"ファミリア";
[am01 runCar];
[am02 runCar];
}
// [継承クラス]ボタンを押した時
- (IBAction)proc04:(id)sender {
// CarK2000 オブジェクト生成(インスタンス化、実体化)
CarK2000 *am = [[CarK2000 alloc] initWithCarName:@"ナイト2000"];
[am runCar];
[am jumpCar];
}
- (IBAction)proc05:(id)sender{
// CarK2000 オブジェクト生成(インスタンス化、実体化)
CarDeLorean *am = [[CarDeLorean alloc] initWithCarName:@"ナイト2200"];
[am runCar];
//[am jumpCar];
[am doTimeSliip];
}
@end
#import <Foundation/Foundation.h>
@interface Automobile : NSObject
// -----------------------------------
// プロパティの設定
// -----------------------------------
// 属性(車名)
@property (weak, nonatomic) NSString *carName;
// 属性(排気量)int = assign 主にスカラー変数(intやBOOLなど)のプロパティ属性として利用されます。
@property (assign, nonatomic) int carHaikiryou;
// -----------------------------------
// メソッドの設定(プロトタイプ宣言)
// -----------------------------------
// メソッドを外部から参照可能
- (void)runCar;
- (void)stopCar;
- (id)initWithCarName:(NSString *)name;
+ (void)turnCar;
@end
#import "Automobile.h"
@implementation Automobile
// NSObject(スーパークラス)オーバーライドされた状態 機能の拡張することが出来る
// 標準イニシャライザ(コンストラクタにあたるもの)
//- (id)init
//{
// // superスーパークラス
// // 親クラスの初期化を行う
// self = [super init];
//
// // 子供クラスの初期化
// if (self) {
//
// }
// return self;
//}
// 指定イニシャライザ
- (id)initWithCarName:(NSString *)name
{
self = [super init];
if (self) {
self.carName = name;
}
return self;
}
// ファイナライザ
// ARC機能がONのため必要はない
//- (void)dealloc
//{
//
//}
//---------------------------------
// インスタンスメソッド
//---------------------------------
// 「走る」メソッド
- (void)runCar {
// ViewController → Automobile データ受入
//NSLog(@"%s",__func__);
NSLog(@"%@ 走る",self.carName);
}
// 「止まる」メソッド
- (void)stopCar {
//NSLog(@"%s",__func__);
NSLog(@"%@ 止まる",self.carName);
}
//---------------------------------
// クラスメソッド
//---------------------------------
// 「曲がる」メソッド
+ (void)turnCar {
//NSLog(@"%s",__func__);
NSLog(@"曲がる");
}
@end
#import "Automobile.h"
@interface CarK2000 : Automobile
// -----------------------------------
// メソッドの設定(プロトタイプ宣言)
// -----------------------------------
// メソッドを外部から参照可能
- (void)jumpCar;
- (void)runCar;
@end
#import "CarK2000.h"
@implementation CarK2000
//---------------------------------
// インスタンスメソッド
//---------------------------------
// 「ジャンプする」メソッド
- (void)jumpCar {
NSLog(@"%@ ジャンプする",self.carName);
}
- (void)runCar {
[super runCar];
NSLog(@"%@ めちゃ速く走る",self.carName);
}
@end
#import "Automobile.h"
@interface CarDeLorean : Automobile
// -----------------------------------
// メソッドの設定(プロトタイプ宣言)
// -----------------------------------
// メソッドを外部から参照可能
- (void)doTimeSliip;
@end
#import "CarDeLorean.h"
@implementation CarDeLorean
//---------------------------------
// インスタンスメソッド
//---------------------------------
// 「ジャンプする」メソッド
- (void)doTimeSliip {
NSLog(@"%@ タイムスリップする",self.carName);
}
@end
GitHub Class
▫️参考ページ
コメントをお書きください