类的继承与super()的意义以即如何写一个正确的异常类

Posted 花间岛

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了类的继承与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自己也是这么做的






































以上是关于类的继承与super()的意义以即如何写一个正确的异常类的主要内容,如果未能解决你的问题,请参考以下文章

Java中的继承关系,子类不需要写super关键字。也能调用到父类的方法么?

Jave 类的继承

java中的super

类的继承中的super()

12.面向对象(继承/super/接口/抽象类)

super与this的区别?