上篇讲了静态,静态变量初始化,还有继承的概念,这篇主要是补充之前一些内容的细节,还有一些零散知识;比如super,以及在有了继承以后,代码块的执行,protect关键字等等;
目录
七、使用编译器自动打印构造方法,get set方法,toStrring方法
一、再谈Super关键字
先回顾一下,我们之前使用Super时,主要是在 子类与父类有变量同名时,调用父类的变量使用;我们也提到了它与与this很像(上篇‘三、继承’展示图中提到)
我们在之前的时候也介绍了this的三种用法,其实Super也是同样有三种用法,下面介绍;
1.1 Super调用父类变量:
super.变量(不演示了,点蓝字上篇介绍)
1.2 Super调用父类方法:
在父类与子类有同名的方法时,调用父类的方法,就用 super.方法名()
1.3 Super在子类构造方法中调用父类构造方法:
在子类方法中调用父类构造方法,如果你的子类构造方法没用使用Super,其实代码会报错;
这是因为在初始化子类前要先帮父类出初始化,必须使用Super,并且必须在第一行,这与this一样,也说明,在这个情况下,他俩没法共存;
二、子父类代码块优先问题
我们上篇同样介绍了代码块的内容,有静态代码块、实例代码块,我们用静态代码块去初始化静态变量,并且也说明了,静态代码块只会加载一次;
那么如果父类子类都有静态代码块,实例代码块,构造方法,它们的执行顺序是什么呢?下面代码来演示
结果:
从上方代码看,我们 父类子类都有静态代码块,实例代码块,构造方法,它们执行的顺序是:
第一次执行:
先父类静态代码块 ==> 子类静态代码块
后父类实例 ==> 构造
最后子类实例 ==> 构造
第二次执行:
先父类实例 ==> 构造
后子类实例 ==> 构造
这也验证了我们之前说的,静态代码块随着类的加载,只加载一次,实例、构造的代码都是先执行父类,然后才是子类的。
三、访问限定修饰符protected
前面我们提供了一张访问修饰限定符的表格,上面有各个修饰符的范围,但是protected没细讲,
根据表我们可以看出protected修饰的变量与方法,在不同包的子类中也可以使用;下图演示
记得要导包,并且为父类构造方法初始化。
四、密封方法final(不能被其他类继承的类)
如果我们想让一个类不能被其他类继承,我们就只要在类名前加上final就可以了
五、继承和组合
关于组合,我先举个例子,像是汽车,汽车有轮胎,有发动机,汽车是由各个部件组合而成的,再举个例子,学校,学校由老师,同学组合而成的。
在代码中:
组合是指一个类将另一个类作为其成员变量,通过组合的方式来使用另一个类的功能。组合关系是一种“包含”关系,一个类的对象包含了另一个类的对象,从而可以使用另一个类的属性和方法。
我个人理解这种用法,就是把另一个类当作一种数据类型去使用,像是Int DoubleI这些一样,不过这些类型有自己的实际含义。
六、ToSting方法
我们有很多字段,在初始化完成以后,想要去打印时,直接打印出来的是引用
所以一般是一个个去写打印,这很累,但是我们在类中写一个ToSting方法就不一样了;
这其实是因为打印方法在Java底层层层调用,最后调用的方法就是toStrring方法,所以这个方法可以打印所有字段。
七、使用编译器自动打印构造方法,get set方法,toStrring方法
我们在之前介绍了各种方法,有封装时为了初始化变量用的get set方法,有创建对象时调用的构造方法,还有刚刚提到的toStrring方法,它们都可以靠编译器自动写出来;
方法是鼠标右键:
点进去可以按 CTRL 不松选择你要创建该方法的变量。
标签:构造方法,子类,代码,修饰符,第十节,方法,编译器,父类,Super From: https://blog.csdn.net/qq_75234423/article/details/143982097