繼承的進一步研究
1.1 子類對象實例化過程
子類對象的實例化::先調用父類的構造方法,然后再調用子類的構造方法。
實例:
class Person
{
private String name;
private int age;
public Person(){
System.out.println("父類person中的構造:");
}
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中的構造:");
}
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();
}
}
結果為:
F:\java>javac ExDemo01.java
F:\java>java ExDemo01
父類person中的構造:
子類Student中的構造:
注意:實際上,此時,對于子類的構造方法中,隱含了一個“super”的語句。有時候將父類成為“超類”。
class Person
{
private String name;
private int age;
public Person(){
System.out.println("父類person中的構造:");
}
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();//默認隱藏
System.out.println("子類Student中的構造:");
}
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 方法的覆蓋
子類定義了與父類同名的方法,但在方法覆蓋時候必須考慮到權限。即被子類覆蓋的方法不能擁有比父類方法更加嚴格的訪問權限。
所以父類中使用public定義的方法,子類的訪問權限必須是public。
java中,訪問權限有四種:
private:最小的訪問權限
default:什么都不聲明
public:最大的訪問權限
private《default《public;
實例:
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 如果飛要調用父類的被覆蓋的方法呢?
通過super關鍵字就可以完成此功能,super關鍵字可以從子類訪問父類的內容,如果要訪問被覆蓋的方法: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();
}
}
結果為:
F:\java>javac ExDemo03.java
F:\java>java ExDemo03
父類
子類
如果去掉super,默認是this.print();程序不斷調用自己的子類的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();
}
}
結果:
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的區別
A:屬性訪問
this訪問本類中的屬性,如果本類沒有此屬性則從父類中繼續查找。
super直接訪問父類的屬性
B:方法
this訪問本類中的方法,如果本類沒有此方法則從父類中繼續查找。
super直接訪問父類的方法
C:構造調用
this調用本類構造
super調用父類構造
D:
this表示當前對象
super無此概念
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061
微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元

