如:
Person *p =[Student new];
p在编译时是Person类型,在运行时是Student类型
Nsobject*p = [Person new];
[p show] //Nsobject会进行编译检测,编译时找show方法,如果有则不报错,若没有则报错
然后运行时,直接去Person找show方法,有就正确,没有则报错
Id p =[Person new];
[p show]; //系统遇到id不会对其进行编译,而是直接运行去Person找show方法,有就正确,没有就报错
id不能访问成员变量,不能调用点语法