一、背景介绍
前段时间和领导交流,被问到:java中什么是继承?继承在编译过程的代码体现是什么?继承在运行时的代码体现是什么?
我的回答:??? 此处留下一些想象的空间。
二、思路&方案
1.放下自己曾经对于java继承的认识,结合问题,查阅资料了解java继承
2.通过简单的damo实现,来理解继承
3.通过idea中的工具查看.java文件编译为.class文件后的子类的结果
4.通过查看.class文件的工具进程查看子类
5.通过只实例化子类,查看是否可以通过子类使用父类的方法
三、过程
1.查询结果
子类拥有父类非 private 的属性、方法。
子类可以拥有自己的属性和方法,即子类可以对父类进行扩展。
子类可以用自己的方式实现父类的方法。
2.同下面5的例子
3.查看结果(子类中没有显示父类中的公有方法)
4.查看结果(子类中没有显示父类中的公有方法)
5.子类是可以直接实例化后使用父类的方法的,证明继承之后编译为.class文件,将父类的公有方法复制到了父类一份
package com.b0027继承; public class Animal { private String name; public void jiao(){ System.out.println("动物叫"); } }
package com.b0027继承; import com.b0016MVC.mvc消息传递.A; public class Pig extends Animal { private void move(){ System.out.println("动物移动"); } }
package com.b0027继承; public class Client { public static void main(String[] args) { // Animal pig = new Pig(); // pig.jiao(); //这里就说明了,子类在进行编译的时候,直接将父类的属性和方法拿到了子类一份, //之后,子类就可以直接点出来父类的方法使用了 Pig pig1 = new Pig(); pig1.jiao(); } }
四、总结
1.对于提出的问题要去思考和落地实现
2.不能被idea工具和查看.class工具呈现的表象迷惑(这两个工具呈现的表象小编认为是为了和.java文件中的内容保持一致)
3.得出结论:继承是将父类非private修饰的属性和方法都复制到了子类一份
五、升华
1.拥有提出这样问题的习惯和思路非常重要
2.就好比我们熟知的空气一样,习惯了有空气的存在从而就将空气是人的必需品给透明化了
3.透明化习惯的摆脱可以利用刻意练习来规避打破(奉上刻意练习的地址:为什么有人工作10年仍不是专家,有人2年就足够卓越了?)