1、关于这个图中,ob的静态类型是父类(superclass),它只能调用父类自己的方法,这句话对吗?
2、如果上面这句话是对的,那么就不存在多态性了。子类继承父类的时候,会获得父类的方法(相当于子类拷贝了一份)还是在使用的时候仅仅是去调用父类的方法?
3、当父类的引用指向子类的对象的时候,子类改写了父类的方法。为什么父类的引用又可以调用子类的方法呢,感觉逻辑上不成立,呵呵
所以图上的第(5)个说的是调用subClass中的f1()方法,而第(6)调用的是superclass的方法,多以在那多态性中,在调用方法时,是有一种调用的顺序吗?如果子类改写了父类的方法就调用子类中的方法,如果子类没有改写父类的方法就调用父类的方法。
不知道这样理解对不对????
不是调用父类自己的方法,而是与父类方法名相同的方法。
对象调用方法的时候是先在自己的实际类型中找,没有才去父类里面找。
引用归引用,但是他实际的类型是子类的类型,子类重写了父类的方法,所以调用的是子类的方法。
哎手点快了,本来想继续追问上面回答者的,结果点成采纳的了。我在问题里说,子类继承父类的时候,会获得父类的方法(相当于子类拷贝了一份)。上一个回答者好像是同意的,但是看图中第(7)个,为什么不能调用f3()函数呢,我们老师说的是,它的静态类型是父类,它只能调用父类里的方法,不知道对不对?
你说调用方法时,现在实际类型中找,但是第(7)个f3()方法是能找到的啊,我感觉是先从父类里找呢
就像人和学生一样,你可以说学生是学生,但不能说人是学生。因为你定义的是父类的类型,你就要符合父类的规范。父类没有的方法,你是调不到的。但实际上你这个对象是含有这个方法的,只不过他是你子类特有的方法,不属于父类。
追问嗯嗯,想明白了。只是不好意思,已经采纳了
追答没什么
嗯嗯,谢谢哦