使用NSObject()实现多态性和封装性
发布时间:2023-12-25 22:45:19
NSObject是Objective-C中的一个基类,它是一个通用的父类,其他所有的类都是由它派生出来的。它作为基类提供了一些通用的功能,比如内存管理、对象之间的消息传递等。
多态性是面向对象编程中的一个重要概念,它指的是同一个方法在不同的对象上可以有不同的行为。在Objective-C中,多态性是通过消息传递来实现的。我们可以通过NSObject基类来实现多态性的功能。
封装性是面向对象编程的另一个重要概念,它指的是将数据和操作数据的方法封装在一起,对外部隐藏实现细节,只暴露必要的方法供外部使用。在Objective-C中,我们可以使用NSObject基类来实现类的封装性。
下面是一个使用NSObject实现多态性和封装性的例子:
// 声明一个Animal类,作为基类
@interface Animal : NSObject
- (void)makeSound;
@end
@implementation Animal
- (void)makeSound {
NSLog(@"Animal is making a sound");
}
@end
// 声明一个Cat类,继承自Animal类
@interface Cat : Animal
@end
@implementation Cat
- (void)makeSound {
NSLog(@"Cat is meowing");
}
@end
// 声明一个Dog类,继承自Animal类
@interface Dog : Animal
@end
@implementation Dog
- (void)makeSound {
NSLog(@"Dog is barking");
}
@end
int main() {
// 创建Animal、Cat和Dog对象
Animal *animal = [[Animal alloc] init];
Cat *cat = [[Cat alloc] init];
Dog *dog = [[Dog alloc] init];
// 多态性的体现,使用Animal类型的指针指向不同的对象,调用相同的方法,得到不同的结果
animal = cat;
[animal makeSound];
animal = dog;
[animal makeSound];
// 封装性的体现,外部无法直接访问类的实例变量,只能通过类的方法来进行操作
// 比如我们可以添加一个set方法来设置实例变量的值,再通过get方法获取实例变量的值
cat.name = @"Tom";
NSLog(@"%@", cat.name);
return 0;
}
在上面的例子中,我们创建了一个Animal基类,以及两个派生类Cat和Dog。Animal类中有一个名为makeSound的方法,而Cat和Dog类分别重写了这个方法,在调用父类的makeSound方法之前打印出了各自的声音。
在main函数中,我们创建了一个Animal类型的指针animal,并分别将它指向Cat和Dog对象。接下来调用animal的makeSound方法,由于animal指向不同的对象,所以得到的结果也不同。这就是多态性的体现。
在封装方面,我们在Cat类中添加了一个名为name的实例变量,并通过属性(property)的方式给它添加了setter和getter方法。外部无法直接访问实例变量,需要通过这两个方法进行操作。这就是封装性的体现。
总结起来,使用NSObject基类可以实现多态性和封装性的功能。多态性通过将父类指针指向不同子类的对象来实现,而封装性可以通过类的方法来操作类的实例变量,隐藏类的实现细节。
