
繼承的進(jìn)一步研究
1.1 子類對(duì)象實(shí)例化過(guò)程
子類對(duì)象的實(shí)例化::先調(diào)用父類的構(gòu)造方法,然后再調(diào)用子類的構(gòu)造方法。
實(shí)例:
class Person { private String name; private int age; public Person(){ System.out.println("父類person中的構(gòu)造:"); } public void setName(String name){ this.name=name; } public void setAge(int age){ this.age=age; } public String getName(){ return this.name; } public int getAge(){ return this.age; } }; class Student extends Person { //此處添加代碼 private String school; public Student(){ System.out.println("子類Student中的構(gòu)造:"); } public void setSchool(String school){ this.school=school; } public String getSchool(){ return this.school; } } public class ExDemo01 { public static void main(String args[]){ Student stu = new Student(); //stu.setName("張三"); //stu.fun(); } } 結(jié)果為: F:\java>javac ExDemo01.java F:\java>java ExDemo01 父類person中的構(gòu)造: 子類Student中的構(gòu)造: 注意:實(shí)際上,此時(shí),對(duì)于子類的構(gòu)造方法中,隱含了一個(gè)“super”的語(yǔ)句。有時(shí)候?qū)⒏割惓蔀椤俺悺薄?class Person { private String name; private int age; public Person(){ System.out.println("父類person中的構(gòu)造:"); } public void setName(String name){ this.name=name; } public void setAge(int age){ this.age=age; } public String getName(){ return this.name; } public int getAge(){ return this.age; } }; class Student extends Person { //此處添加代碼 private String school; public Student(){ super();//默認(rèn)隱藏 System.out.println("子類Student中的構(gòu)造:"); } public void setSchool(String school){ this.school=school; } public String getSchool(){ return this.school; } } public class ExDemo01 { public static void main(String args[]){ Student stu = new Student(); //stu.setName("張三"); //stu.fun(); } }
1.2 方法的覆蓋
子類定義了與父類同名的方法,但在方法覆蓋時(shí)候必須考慮到權(quán)限。即被子類覆蓋的方法不能擁有比父類方法更加嚴(yán)格的訪問(wèn)權(quán)限。
所以父類中使用public定義的方法,子類的訪問(wèn)權(quán)限必須是public。
java中,訪問(wèn)權(quán)限有四種:
private:最小的訪問(wèn)權(quán)限
default:什么都不聲明
public:最大的訪問(wèn)權(quán)限
private《default《public;
實(shí)例:
class Person { void print(){ System.out.println("父類"); } }; class Student { public void print(){ System.out.println("子類"); } }; public class ExDemo03 { public static void main(String args[]){ Student stu = new Student(); stu.print(); } }
輸出為;
F:\java>javac ExDemo03.java
F:\java>java ExDemo03
子類
1.3 如果飛要調(diào)用父類的被覆蓋的方法呢?
通過(guò)super關(guān)鍵字就可以完成此功能,super關(guān)鍵字可以從子類訪問(wèn)父類的內(nèi)容,如果要訪問(wèn)被覆蓋的方法:super.方法();
//import java.lang.*;
class Person
{
void print(){
System.out.println("父類");
}
};
class Student extends Person
{
public void print(){
super.print();
System.out.println("子類");
}
};
public class ExDemo03
{
public static void main(String args[]){
Student stu = new Student();
stu.print();
}
}
結(jié)果為:
F:\java>javac ExDemo03.java
F:\java>java ExDemo03
父類
子類
如果去掉super,默認(rèn)是this.print();程序不斷調(diào)用自己的子類的print();
//import java.lang.*; class Person { void print(){ System.out.println("父類"); } }; class Student extends Person { public void print(){ print(); System.out.println("子類"); } }; public class ExDemo03 { public static void main(String args[]){ Student stu = new Student(); stu.print(); } }
結(jié)果:
at Student.print(ExDemo03.java:11)
at Student.print(ExDemo03.java:11)
at Student.print(ExDemo03.java:11)
at Student.print(ExDemo03.java:11)
at Student.print(ExDemo03.java:11)
at Student.print(ExDemo03.java:11)
at Student.print(ExDemo03.java:11)
at Student.print(ExDemo03.java:11)
at Student.print(ExDemo03.java:11)
at Student.print(ExDemo03.java:11)
at Student.print(ExDemo03.java:11)
at Student.print(ExDemo03.java:11)
at Student.print(ExDemo03.java:11)
at Student.print(ExDemo03.java:11)
at Student.print(ExDemo03.java:11)
at Student.print(ExDemo03.java:11)
at Student.print(ExDemo03.java:11)
at Student.print(ExDemo03.java:11)
at Student.print(ExDemo03.java:11)
at Student.print(ExDemo03.java:11)
1.4 this與super的區(qū)別
A:屬性訪問(wèn)
this訪問(wèn)本類中的屬性,如果本類沒(méi)有此屬性則從父類中繼續(xù)查找。
super直接訪問(wèn)父類的屬性
B:方法
this訪問(wèn)本類中的方法,如果本類沒(méi)有此方法則從父類中繼續(xù)查找。
super直接訪問(wèn)父類的方法
C:構(gòu)造調(diào)用
this調(diào)用本類構(gòu)造
super調(diào)用父類構(gòu)造
D:
this表示當(dāng)前對(duì)象
super無(wú)此概念
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號(hào)聯(lián)系: 360901061
您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對(duì)您有幫助就好】元
