day09、继承
问题1:为什么java的构造方法中this()或者super()要放在第一行
super()在第一行的原因就是: 子类有可能访问了父类对象, 比如在构造函数中使用父类对象的成员函数和变量, 在成员初始化使用了父类, 在代码块中使用了父类等, 所以为保证在子类可以访问父类对象之前要完成对父类对象的初始化
this()在第一行的原因就是: 为保证父类对象初始化的唯一性. 我们假设一种情况, 类B是类A的子类, 如果this()可以在构造函数的任意行使用, 那么会出现什么情况呢? 首先程序运行到构造函数B()的第一行, 发现没有调用this()和super(), 就自动在第一行补齐了super() , 完成了对父类对象的初始化, 然后返回子类的构造函数继续执行, 当运行到构造函数B()的"this(2) ;"时, 调用B类对象的B(int) 构造函数, 在B(int)中, 还会对父类对象再次初始化! 这就造成了对资源的浪费, 当然也有可能造成某些意想不到的结果, 不管怎样, 总之是不合理的, 所以this() 不能出现在除第一行以外的其他行!
参考来自:https://www.bbsmax.com/A/GBJrvYKRJ0/
问题2:static能修饰类吗
static不可以修饰普通类,但是可以修饰内部类
day10、抽象、多态
问题1、抽象类的为什么能存在构造方法
抽象类可以被继承,继承它的子类会有默认的构造方法,并且第一行会super()调用父类的构造方法,如果抽象方法没有构造方法,那子类会报错,这间接证明了抽象类中存在构造方法
问题2、继承和接口实现存在先后顺序吗
先继承类,然后才能写实现接口,原因是
问题3、接口中存在构造方法、构造代码块吗,
解答1:接口中存在构造方法:不允许,接口中的方法是是公开抽象的,构造方法有方法体。
解答2、构造代码块构造代码块随着构造方法而存在,构造方法不存在,构造代码块也不存在
问题4、接口不能实现接口
接口的实现是重写,接口不能重写
本文探讨了Java中构造方法使用this()或super()必须置于第一行的原因,确保对象初始化顺序正确。同时,解释了抽象类为何可以拥有构造方法,因为子类需要通过构造方法初始化父类对象。此外,详细阐述了继承与接口实现的顺序,接口的特性以及多态下构造函数传值的原理。最后,提到了Arrays.sort方法的底层实现。
1179

被折叠的 条评论
为什么被折叠?



