這里我要糾正一下老師的錯誤,在入口類測試父類和子類它們的屬性和方法的執行順序時,其實是按入口類編寫代碼的順序執行的(比如在入口類把調用父類對象放在子類對象的后面),并不是老師說的先執行父類對象,然后再執行子類對象的步驟,這點學員們可以用軟件去驗證一下

llpjack
2014-10-22
5 回答
舉報
0/150
提交
取消
2015-03-20
sba,budongbuyaoxiashuo
2014-10-23
再來看一下構造方法的測試
這是父類a
public class a {
?? ?protected int age=10;
?? ?
?? ?
public a(){
?? ?System.out.println("a執行了");
?? ?
}
}
這是子類c
public class c extends a {
?? ?public c(){
?? ??? ?System.out.println("c執行了");
?? ??? ?
?? ?}
?? ?
?? ??? ?
?? ?}
這是入口類d
public class d {
?? ?public static void main(String[] args) {
?? ??? ?
?? ??? ?c b=new c();
?? ??? ?
?? ??? ?System.out.println("c執行了:"+b.age);
?? ??? ?a ab=new a();
?? ??? ?System.out.println("a執行了:"+ab.age);
?? ??? ?
?? ??? ?
?? ?}
?? ?
}
輸出結果:
a執行了
c執行了
c執行了:10
a執行了
a執行了:10
上面的結果是不是這個意思:先執行父類的無參構造方法,接著執行子類的無參構造方法,然后執行子類對象,接著執行父類無參構造方法,最后再執行父類對象
2014-10-23
I don't think you are right.U know the parent class is prior to the son class.
2014-10-22
老師我先給你看一下普通方法的測試(這里我沒測試屬性):
這是父類a
public class a {
?? ?protected int age=10;
?? ?
public void e(){
?? ?System.out.println("a執行了");
?? ?
}
}
這是子類c
public class c extends a {
?? ?public void r(){
?? ??? ?System.out.println("c執行了");
?? ??? ?
?? ?}
?? ?
?? ??? ?
?? ?}
這是入口類d
public class d {
?? ?public static void main(String[] args) {
?? ??? ?
?? ??? ?c b=new c();
?? ??? ?
?? ??? ?System.out.println("c執行了:"+b.age);
?? ??? ?a ab=new a();
?? ??? ?System.out.println("a執行了:"+ab.age);
?? ??? ?
?? ?}
?? ?
}
輸出結果:
c執行了:10
a執行了:10
2014-10-22
這位童鞋我不知道你是怎么寫的代碼,你可以在父類中定義一個構造方法在該方法中打印父類中的某個屬性,再在子類中定義個構造方法在該方法中打印子類中的某個屬性,當你在測試類中實例化子父類的時候看看運行順序。