DAY15-JAVA的继承(2)

前面已经提过,执行子类别的建构元之前,会先呼叫父类别的建构元,以便进行初始化的动作。但是如果父类别有数个建构元时,要如何才能呼叫父类别中特定的建构元呢?这时候就要透过"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


<<:  Day 3 安装 RSpec 以及环境设定

>>:  Day2 用python写UI-聊聊tkinter的基本操作~

[Day 18]所以我说那个酱汁呢(前端篇)

挑战目标: MockNative Camp 这次的挑战应该就止步於此了,在前端上我太弱小LA,没有事...

Palo Alto Networks PSE-Strata Dumps - 让 PSE-Strata 考试成为无压力考试

PSE-Platform Professional | PSE-Strata Professiona...

Day 30 - 恭喜我熬过 30 天

完工撒花~ 到了这里 终於完成 30 天挑战了 有追到最後的朋友感谢你们~~ 作为系列文的最後一篇 ...

Day 27 - Click and Drag to Scroll

前言 JS 30 是由加拿大的全端工程师 Wes Bos 免费提供的 JavaScript 简单应用...

30天程序语言研究

今天是30天程序语言研究的第十七天,由於深度学习老师多让我们上了python的进阶课程里面包括之前没...