多态调用成员变量,编译和运行时都参看引用型变量所在的类有没有所调用的成员变量,编译运行看等号左边,成员变量的调用所依赖的是引用型变量的引用
多态调用非静态成员函数,编译时看引用性变量所在类中有没有被调用的函数,运行时看实例对象所在类中有没有被调用的函数,即调非静态成员函数时,编译看等号左边,运行看右边。 f.fun()这句话的理解是:调用成员函数的是new Zi()实例对象,而不是引用型变量f(仅仅是一个对象实体的引用地址值),非静态成员函数调用所依赖的是调用它的对象实体,而不是对象实体的引用
和多态时调用成员变量是有区别的
静态成员函数不存在多态问题,静态函数不依赖于对象直接类名调用即可,调用静态函数前创建对象是没有意义的
多态的应用:
向上转型,提升为父类,隐藏子类类类型即隐藏子类的特有方法,限制特有功能的使用
向下转型,向下转型必须要判断instanceof之类类类型,是为了使用子类的特有方法 |