0
点赞
收藏
分享

微信扫一扫

继承-被透明化的认知


目录

  • ​​一、背景介绍​​
  • ​​二、思路&方案​​
  • ​​三、过程​​
  • ​​四、总结​​
  • ​​五、升华​​

一、背景介绍

前段时间和领导交流,被问到:java中什么是继承?继承在编译过程的代码体现是什么?继承在运行时的代码体现是什么?

我的回答:??? 此处留下一些想象的空间。

二、思路&方案

1.放下自己曾经对于java继承的认识,结合问题,查阅资料了解java继承
2.通过简单的damo实现,来理解继承
3.通过idea中的工具查看.java文件编译为.class文件后的子类的结果
4.通过查看.class文件的工具进程查看子类
5.通过只实例化子类,查看是否可以通过子类使用父类的方法

三、过程

1.查询结果
子类拥有父类非 private 的属性、方法。
子类可以拥有自己的属性和方法,即子类可以对父类进行扩展。
子类可以用自己的方式实现父类的方法。

2.同下面5的例子

3.查看结果(子类中没有显示父类中的公有方法)

继承-被透明化的认知_子类


继承-被透明化的认知_开发语言_02

继承-被透明化的认知_java_03

4.查看结果(子类中没有显示父类中的公有方法)

继承-被透明化的认知_子类_04

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年就足够卓越了?​​)


举报

相关推荐

0 条评论