
关于Java多态性的问题,到底调用的是父类的还是子类的方法?
1、关于这个图中,ob的静态类型是父类(superclass),它只能调用父类自己的方法,这句话对吗?2、如果上面这句话是对的,那么就不存在多态性了。子类继承父类的时候,...
1、关于这个图中,ob的静态类型是父类(superclass),它只能调用父类自己的方法,这句话对吗?
2、如果上面这句话是对的,那么就不存在多态性了。子类继承父类的时候,会获得父类的方法(相当于子类拷贝了一份)还是在使用的时候仅仅是去调用父类的方法?
3、当父类的引用指向子类的对象的时候,子类改写了父类的方法。为什么父类的引用又可以调用子类的方法呢,感觉逻辑上不成立,呵呵
所以图上的第(5)个说的是调用subClass中的f1()方法,而第(6)调用的是superclass的方法,多以在那多态性中,在调用方法时,是有一种调用的顺序吗?如果子类改写了父类的方法就调用子类中的方法,如果子类没有改写父类的方法就调用父类的方法。
不知道这样理解对不对???? 展开
2、如果上面这句话是对的,那么就不存在多态性了。子类继承父类的时候,会获得父类的方法(相当于子类拷贝了一份)还是在使用的时候仅仅是去调用父类的方法?
3、当父类的引用指向子类的对象的时候,子类改写了父类的方法。为什么父类的引用又可以调用子类的方法呢,感觉逻辑上不成立,呵呵
所以图上的第(5)个说的是调用subClass中的f1()方法,而第(6)调用的是superclass的方法,多以在那多态性中,在调用方法时,是有一种调用的顺序吗?如果子类改写了父类的方法就调用子类中的方法,如果子类没有改写父类的方法就调用父类的方法。
不知道这样理解对不对???? 展开
4个回答
展开全部
不是调用父类自己的方法,而是与父类方法名相同的方法。
对象调用方法的时候是先在自己的实际类型中找,没有才去父类里面找。
引用归引用,但是他实际的类型是子类的类型,子类重写了父类的方法,所以调用的是子类的方法。
更多追问追答
追问
哎手点快了,本来想继续追问上面回答者的,结果点成采纳的了。我在问题里说,子类继承父类的时候,会获得父类的方法(相当于子类拷贝了一份)。上一个回答者好像是同意的,但是看图中第(7)个,为什么不能调用f3()函数呢,我们老师说的是,它的静态类型是父类,它只能调用父类里的方法,不知道对不对?
你说调用方法时,现在实际类型中找,但是第(7)个f3()方法是能找到的啊,我感觉是先从父类里找呢
追答
就像人和学生一样,你可以说学生是学生,但不能说人是学生。因为你定义的是父类的类型,你就要符合父类的规范。父类没有的方法,你是调不到的。但实际上你这个对象是含有这个方法的,只不过他是你子类特有的方法,不属于父类。
展开全部
你也说了,是”子类继承父类的时候,会获得父类的方法(相当于子类拷贝了一份)“。
那么子类从父类继承的方法和父类就没有关系了,想怎么改就怎么改,就好比父亲是修汽车的,他把修汽车要用的知识全交给了你,但你有了这些知识不一定非要去修车啊,你不去修车,你父亲也不会因为这样而不会修车啊
那么子类从父类继承的方法和父类就没有关系了,想怎么改就怎么改,就好比父亲是修汽车的,他把修汽车要用的知识全交给了你,但你有了这些知识不一定非要去修车啊,你不去修车,你父亲也不会因为这样而不会修车啊
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
参考:
父类中有方法1,子类中未重写方法1;调用父类方法1;
父类中有方法1,子类中重写了方法1;调用子类方法1
父类中无方法1; 调用方法1时编译错误
父类中有方法1,子类中未重写方法1;调用父类方法1;
父类中有方法1,子类中重写了方法1;调用子类方法1
父类中无方法1; 调用方法1时编译错误
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
对的哦。。。。。。。。。
追问
嗯嗯,谢谢哦
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询