----------------------
ASP.Net+Unity开发
、
.Net培训
、期待与您交流! ----------------------
get方法:
使用原则
多态:
一.封装:
不再使用@public使成员变量可以直接访问。
set方法:
- /*方法名以set开头;setAge首字母大写;返回值一定是void;一定要接收一个和成员变量类型一样的参数;形参和成员变量名要不一样,成员变量名使用下划线_开头。*/
- 声明:
- - (void) setAge:(int)age;
- 实现:
- -(void)setAge:(int)age
- { if(age<=0)
- { age=1; }
- _age=age;
- }
- 调用:
- [stu setAge:10];
- /*命名规范:必须要有返回值且与成员变量类型一致;
- 方法名和成员变量一致;不用接受任何参数;*/
- 声明:
- - (int)age;
- 实现:
- - (int)age
- { return _age; } //
- 调用:
- [stu age];
继承:
定义
- /*抽取重复代码
- 建立类之间的关系
- 子类可以拥有父类中的所有成员变量和方法
- 所有类的根类是NSObject ,NSProxy不常用*/
- 声明:动物类
- @interface Animal : NSObject //动物继承类NSObject
- {
- int _age;
- double _weight;
- }
- - (void)setAge:(int) age;
- - (int)age;
- - (void)setWeight:(double)weight;
- - (double)weight;
- @end
- 实现:
- @implementation Animal
- ......
- @end
- 声明 :狗类
- @interface Dog : Animal; //狗继承类Animal,相当于拥有了Animal里面的所有成员变量和方法。
- @end
使用原则
- /*父类的声明需要写在子类声明之前
- 子类和父类不能有相同的成员变量
- 子类方法可以与父类名相同,调用的时候优先去当前的类中找,没有就去父类里找。子类可以用一个相同的方法名来重写父类的方法。
- 在某些场合,虽然双方都具有继承逻辑特征,但是,并不适合,这时候需要组合而不是继承*/
- @interface Score : NSObject
- {
- int _cScore;
- int _ocScore;
- }
- @end
- @implementation Score
- @end
- //继承:XX是一个XXX
- //组合:XX 拥有 XXX
- @interface Student : NSObject//理论上确实可以继承Score@interface Student : Score,但是不符合道理,此时就要用到组合
- {
- Score *score;//组合:把Score当成Student的一部分---->学生拥有成绩
- //int _cScore;
- //int _ocScore;
- int _age;
- }
- @end
- @implementation Student
- @end
多态:
- /*
- 1.没有继承就没有多态
- 2.代码的体现:父类类型的指针指向子类对象
- 3.好处:如果函数\方法参数中使用的是父类类型,可以传入父类、子类对象
- 4.局限性:
- 1> 父类类型的变量 不能 直接调用子类特有的方法。必须强转为子类类型变量后,才能直接调用子类特有的方法
- */
- // 动物
- @interface Animal : NSObject
- - (void)eat;
- @end
- @implementation Animal
- - (void)eat
- {
- NSLog(@"Animal-吃东西----");
- }
- @end
- // 狗
- @interface Dog : Animal
- - (void)run;
- @end
- @implementation Dog
- - (void)run
- {
- NSLog(@"Dog---跑起来");
- }
- - (void)eat
- {
- NSLog(@"Dog-吃东西----");
- }
- @end
- // 猫
- @interface Cat : Animal
- @end
- @implementation Cat
- - (void)eat
- {
- NSLog(@"Cat-吃东西----");
- }
- @end
- // 如果参数中使用的是父类类型,可以传入父类、子类对象
- void feed(Animal *a)
- {
- [a eat];
- }
- int main()
- {
- Animal *aa = [Dog new];
- //[aa run]; 多态的局限性:父类类型的变量 不能 用来调用子类的方法
- // 将aa转为Dog *类型的变量</span>
- Dog *dd = (Dog *)aa;
- [dd run];
- // 多种形态
- //Dog *d = [Dog new]; // Dog类型
- // 多态:父类指针指向子类对象
- Animal *a = [Dog new];
- // 调用方法时会检测对象的真实形象
- [a eat];
- return 0;
- }