类的继承与super()的意义以即如何写一个正确的异常类
这些东西都是我看了许多名师课程和自己研究的成果,严禁转载,这里指出了如何正确的自己定义一个异常类并看一看sun写的java的源代码
话题一:子类的构造器执行是否一定会伴随着父类的构造执行?
1.this()与super()不能共存
2.如果不显示地调用this()和super();子类对象的创建是否一定执行父类的构造
3.既然super()和this()不能共存,又说子类的构造执行一定会执行父类的构造,那么我让子类的构造执行this()是不是就不能在执行父类的构造?
4.如果我非不让父类的构造执行,我通过子类无参的去调用有参的this(int age);然后有参的去调用无参的this()现在系统就无法调用
super()了吧但是!!!直接报错
总结子类的构造只要被执行,一定伴随着父类的构造的执行
话题二:为什么要设计子类的构造一定伴随父类的被动构造执行
1.首先,我们回到构造的定义:创建对象,并给类成员初始提供手段这就是构造的作用。那么子类调用父类构造有什么作用?
答案:子类中包含从父类中继承的成员,我们这里就理解为每一个子类对象中,包含一个父类型的对象,我们可以通过super()来给子类中父类型的对象初始化,这可以提高代码的重用。
但是这样意义还是不大啊:我不在乎这点代码片段
那么我举一个实例,如果父类中的成员是私有的,你只能通过super()来给私有的成员赋值,那么为什么要给父类的私有成员赋值成员
这里有一个实例:
可以看到我自己写的一个异常:被编译器抛出来了。并用抛出的写的错误提示,显示MyException(我写的)从它的父类Exception(系统写的)中继承了
这个字段,用于存放”年龄非法“这个字符串,但是它在父类中是私有的,你只能通过这个方法来给它赋值
显然你给的错误提示根本没有被编译器抛出。具体,要看java写的源代码
显然只有对父类中的那个私有的字段赋值,你写的一个参的异常类构造才有意义
首先我们只看父类的一个参数的构造(因为我只调用了它),进入Exception只找一个参数的构造
可见Exception又调用了它父类的构造
没有在调用super();了所以已经到顶层了,显然你写了那个”年龄非法“最后存到detaiLMessage中去了。
看一下它的定义
果然是私有的,父类中私有的东西子类无法直接访问,显然只能通过调用super();java中的Exception自己也是这么做的
最新文章
- 域环境下装SQL SERVER的一次惨痛经历
- webkit常见问题汇总
- 【Lucene4.8教程之四】分析
- scala学习-类与对象
- 熟练掌握HDFS的Java API接口访问
- c# 流程控制
- 对DataTable(或者DataSet)修改后,提交修改到数据库
- Spring的注解@Qualifier小结
- bzoj2253 纸箱堆叠
- django模板语法
- [转] 浅谈session,cookie,sessionStorage,localStorage的区别及应用场景
- ORA-02275: 此表中已经存在这样的引用约束条件
- 关于在WP8.1中使用剪贴板的问题
- 生成ansible-playbook的yaml文件的代码(字典排序问题无法解决)
- Sticks POJ - 1011 少林神棍 dfs四次剪枝
- CCCC L2-013. 红色警报 连通分量
- linux系统挂载ISO文件
- The remote end hung up unexpectedly
- Codeforces Round #239 (Div. 1) 二项式差分
- oracle 11G 导出空表失败的解决方法
热门文章
- unity shader 内置变量
- maven工程编译成jar包
- extjs控制器调用其他视图的函数实现控件赋值。
- Linux驱动 - SPI驱动 之四 SPI数据传输的队列化
- 四川第七届 D Vertex Cover(二分图最小点覆盖,二分匹配模板)
- 五颜六色的记事本 Notepad2.cn
- 第五章 JVM调优(待续)
- web.config中namespace的配置(针对页面中引用)
- When install ”matplotlib” with ”pip”, if you get the following error, it means the “freetype” and “png” libraries needed by matplotlib are not installed:
- iOS 给Main.storyboard 添加button 事件《转》