编译检查 假设一个指针指向一个对象 A *p1 = [B new]; 假设:A和B不是同一个类,那么如果我调用了某一个方法 [ p1 length]; 那么 1.如果length方法是A中没有的,无论B中有无该方法都无法通过编译。因为编译器只会在A类中去找是否有此方法,没有就编译失败,否则成功。2.如果A中有此方法,那么通过编译。但是运行的时候分两种情况: 1)B有此方法,运行时检查也通过 2)B无此方法,运行时检查错误。 注意:基类和子类的关系参照上述内容。LSP:里氏替换原则,任何指针可以指向任意对象,只是会在运行的时候检查。