JAVA實訓總結:繼承-——子類創建對象原理


繼承關鍵字: extends
Java只允許單繼承存在
不可以被繼承的東西:
1.private成員
體現了java的封裝特點,外部類只允許set()get()方法調用,若無set()方法,則類創建的對象, 只會在被創建時用構造方法賦值·,且只可賦值一次(每次用構造方法new出的對象地址均不同)
 
2.構造方法(構造方法不可以被繼承,只可以用super()調用)
 
3.子類與父類不在同包,使用默認訪問權限的成員
 
訪問修飾符總結:
private:只可以在本類調用,外部類訪問需要 get() 方法
默認(friendly):可在本類訪問,可在同包中可以訪問
protected:可在本類訪問,可在同包中可以訪問,可在不同包但為其子類的類中訪問
public:上述均可訪問,可在不同包不為其子類的類中訪問
 
子類創建對象原理:
子類所有的 構造函數 默認調用 父類的無參構造函數(其實是默認省略掉了一行代碼:super(););省略掉的這行super()代碼可以自行添加到構造函數的第一行(必須是第一行,否則報錯)
若子類調用父類的有參構造寫法為:super( 類型 參數)
父類:person
public class Person {
int num = 0;
Person(){}
Person(int num){
this.num = num;
System.out.println("傳入人數"+num+"\t父類人數"+this.num);
}
public void print(){
System.out.println("執行父類類方法");
}
}

 

子類:student
public class Student extends Person{
int num = 0;
String name = null;
public Student(){}
public Student(int num,String name){
super(num);
super.print();
this.name = name;
System.out.println("子類人數"+num);
System.out.println("父類人數"+super.num);
}
}

 

測試類:
public class Test {
public static void main(String[] args) {
Student student = new Student(99,張三);
student.print();
}
}

 

當執行 Student student = new Student(99)時,內部執行順序為:
1.利用父類 int num = 0;開辟空間此時Person.num=0 但傳入的num為99;Person.num與num並不指向一個空間
2.執行父類構造方法this.num = num;此時num為99,但是Person.num一直為0
3.然后執行子類的屬性
4.接着執行子類構造方法
以上過程在子類輸出super.num 均為99
在父類輸出num為99,輸出this.num為99
因為這時子類創建對象開辟的空間是包含父類開辟的空間的
如圖所示:
 
同時,在初始化該子類對象(student)時, 會同時創建三個對象(創建父類對象與Object對象),在java中所有的類都有一個父類,如果你的類不繼承任何類,java會自動讓它繼承Object類
 
 
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM