对继承的一点点理解,可能不完全正确,还请大家指出错误。

来源:互联网 发布:大秦帝国之纵横知乎 编辑:程序博客网 时间:2024/04/27 09:19

今天认真的看了一下 JAVA SE 的东西,感觉对继承有了更加深刻得理解。(不过,我感觉啊,像我这些还没有达到大牛的水平,知道了这些原理,也不知道怎么用,哈哈,还是先理解吧,说不定有助于我们蜕变成大牛呢!!!希望是这样),好了,废话说完,下面正式开始。

先来看一个例子啊:

 

大家都知道打印出来的结果是   A  。  

现在把代码变一下(将类B中的 test 改成 test01):

这个时候,编译器就会报错。

好,现在再把代码变一下:

在这中情况下呢,编译器没有报错,程序可以正常运行。这个大家都知道,我就不多说了。

总结:我们要从三种情况的不同结果,找出藏在表面现象里面的运行原理。好了,我是这样理解的,程序在编译时,编译器会先看看是申明的是那个类,就是 A a ;  或者是  B b ;  如果是 A a ;,那编译器就先会看看类A里面有没有test这个方法,如果没有,就向上转型,看看类B里面有没有test这个方法(如果B还继承其他的类,那就还要继续向上转型,看有没有test这个方法),现在找到了test方法了,所以程序编译就不会出错;那么运行时的时候呢,JVM就会看申明的是指向那个对象的引用,首先看看这个对象有没有test方法,如果没有,就向上转型,一直找到test方法为止(不会找不到test方法的,因为在编译期,就确保了一定要有test方法,如果还是不理解就看前面的几句话)。现在我用一句话总结一下:编译看申明,运行看实际指向的对象,没找到方法就向上转型,一直找到为止

呵呵,我就是这样理解的了,可能说的有些乱,希望对某些新手能有一点帮助啦,当然,我那里说错了,请大家也给我指出来...

原创粉丝点击