为什么重写了的就不会使父类方法强制执行?

比如这个代码publicclassHaaa{publicstaticvoidmain(String[]args){Aa=newB();a.p();}}classA{pub... 比如这个代码
public class Haaa {

public static void main(String[] args) {
A a = new B();
a.p();
}
}

class A {
public void p() {
System.out.println("父类");
}
}

class B extends A {

public void p() {
System.out.println("子类");
}
}
输出:子类
展开
 我来答
百度网友9c743b7
推荐于2016-06-27 · TA获得超过925个赞
知道小有建树答主
回答量:360
采纳率:100%
帮助的人:324万
展开全部
这种机制简单点说就是java就是这么做的,不要去想什么强制执行,就当规则记就好了。
规则:
编译时看引用类型,运行时多态。多态就是你看到的现象,这是java这门语言三大特点之一,封装,继承,多态。
解释下,编译时就是你写程序时,用的都是父类引用a,当你a.p()的时候这个时候只看你父类里面有没有p()这个方法,只要有java编译器就不找你麻烦。但是运行时的时候只看你new的那个是什么,你new的父类调用的就是父类的p(),你new的子类掉的就是子类的p()。这就是规则必须记住。
说点需要理解的,为什么要这么做,编程都是面向接口的,有些时候你关心的只是大的类型,具体什么类型产生什么行为那是运行时才有分别的,比如书上的例子经常是Animal会吃,你只要声明Animal的引用就可以了,Animal.eat()这个时候你只关心把东西吃掉。但是狗是嚼碎了吃,猫是添完再吃,这个你根本不用关心,程序运行的时候狗怎么吃,猫怎么吃自然就分开了。自己写例子吧
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询
您可能需要的服务
百度律临官方认证律师咨询
平均3分钟响应 | 问题解决率99% | 24小时在线
立即免费咨询律师
16687人正在获得一对一解答
昆明彩云之南5分钟前提交了问题
沈阳星空之梦5分钟前提交了问题
成都星星点灯5分钟前提交了问题
下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消
还有疑问? 马上咨询33716位在线律师,3分钟快速解答
立即免费咨询律师

辅 助

模 式