前面已经提过,执行子类别的建构元之前,会先呼叫父类别的建构元,以便进行初始化的动作。但是如果父类别有数个建构元时,要如何才能呼叫父类别中特定的建构元呢?这时候就要透过"super()"才能呼叫。
class Test{
private int height = 10;
private int width;
public Test{ //父类别里没有引数的建构元
...
}
class Test(int w){ //父类别里有一个引数的建构元
...
}
...
class lala extends Test{
public lala(){
...
}
public lala(int w,int v){ //子类别里有两个引数的建构元
super(w); //呼叫父类别哩,有引数的建构元
...
}
}
}
特别注意到:
呼叫父类别建构元的super()必须写在子类别建构元里的第一个叙述,不能放在其他地方,否则会出现编译错误的讯息。
super()可以多载,也就是说,super()可以根据引数的数量及型态,执行相对应的父类别建构元。
this()与super()比较
-相异处
this()是在同一类别内呼叫其他的建构元。
super()则是从子类别的建构元呼叫其父类别的建构元。
-相似处
当建构元有多载时,this()与super()均会根据所给予的引数型态与个数,正确的执行相对应的建构元。
this()与super()都必须钻写在建构元内的第一行,也就是因为这样,所以this()与super()没有办法同时出现在同一个建构元内。
保护成员
从前面的例子可以看到,lala是由Test继承而来,但是因为在Test中我们把变数宣告成private,那要如何让子类别做使用呢?这时候只要把变数宣告成保护成员(protected member)就可以了!
class Test{
protected int height = 10; //将height宣告成protected
protected int width; //将width宣告成protected
public Test{
...
}
class Test(int w){
...
}
...
class lala extends Test{
public lala(){
...
}
public lala(int w,int v){
width = w; //在子类别里可直接取用父类别里的protected成员
...
}
}
}
把成员宣告成protected的最大好处是,可同时兼顾到成员的安全性与便利性。
菜鸟工程师也有分享食记,欢迎大家追踪喔~~
https://instagram.com/engineer_bodyfat?utm_medium=copy_link
今天星期五啦啦啦啦啦~~
下礼拜中秋连假!!
准备放假罗~
See U tomorrow
>>: Day2 用python写UI-聊聊tkinter的基本操作~
挑战目标: MockNative Camp 这次的挑战应该就止步於此了,在前端上我太弱小LA,没有事...
PSE-Platform Professional | PSE-Strata Professiona...
完工撒花~ 到了这里 终於完成 30 天挑战了 有追到最後的朋友感谢你们~~ 作为系列文的最後一篇 ...
前言 JS 30 是由加拿大的全端工程师 Wes Bos 免费提供的 JavaScript 简单应用...
今天是30天程序语言研究的第十七天,由於深度学习老师多让我们上了python的进阶课程里面包括之前没...