程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> java中子類繼續父類,法式運轉次序的深刻剖析

java中子類繼續父類,法式運轉次序的深刻剖析

編輯:關於JAVA

java中子類繼續父類,法式運轉次序的深刻剖析。本站提示廣大學習愛好者:(java中子類繼續父類,法式運轉次序的深刻剖析)文章只能為提供參考,不一定能成為您想要的結果。以下是java中子類繼續父類,法式運轉次序的深刻剖析正文


我們常常在項目中應用繼續,然則常常不太明確,法式運轉的次序和道理,特別是應用上轉型對象的時刻,和父類子類中都有static變量和辦法時,不曉得先運轉誰。我也是寫了一個例子。總結了一下。

父類:
public class TestStatic {

    public static String name="china";

    {
       System.out.println("========辦法體========");
    }

    static{
       name="England";
       System.out.println("========靜態法式塊======");
    }

    TestStatic(){
       System.out.println("=========結構辦法========");
    }

    public static void main(String[] args){
       System.out.println("========主辦法========"+name);
    }

    public void test(){
       System.out.println("========測試辦法=========");
    }
}

子類:
public class TestExtendStatic extends TestStatic{

    //public static String name="HUBEI";

    {
       System.out.println("========無稱號辦法體========");
    }

    static{
       //name="SUIZHOU";
       System.out.println("========子類靜態法式塊======");
    }

    TestExtendStatic(){
       System.out.println("=========子類結構辦法========");
    }

    public void test(){
       System.out.println("========子類測試辦法=========");
    }

    public static void main(String[] args){
       System.out.println("========子類主辦法========"+name);
       TestStatic ts = new TestExtendStatic();// 上轉型對象
       ts.test();
    }
}
輸入以下:
========靜態法式塊======   :父類static法式塊
========子類靜態法式塊======  :子類static法式塊 【不是靜態辦法】
========子類主辦法========England  :子類主辦法
========辦法體======== :父類中非靜態代碼塊
=========結構辦法======== :父類結構辦法
========無稱號辦法體======== :子類中非靜態代碼塊
=========子類結構辦法======== :子類結構辦法
========子類測試辦法========= :子類測試辦法

履行次序: 父類靜態變量和靜態法式塊 --- 子類的靜態變量和靜態法式塊 --- 父類非靜態代碼塊 --- 父類中結構辦法 --- 子類中非靜態代碼塊 --- 子類中結構辦法 --- 接上去才是 對象挪用的方
法。
只需是用new 創立對象,分派了內存空間,不論是將援用賦給上轉型對象,照樣賦給子類對象,下面辦法都必需履行。
即:TestStatic ts = new TestExtendStatic();// 上轉型對象
    TestExtendStatic ts = new TestExtendStatic();// 子類對象
下面加粗法式都邑履行。

下面法式中 ts.test(); ts作為上轉型對象挪用的是 子類繼續的父類中的辦法,由於test()在子類中被重寫了,所以輸入的為子類中的語句。

假如將子類中 main 辦法該成以下:

public static void main(String[] args){
       System.out.println("========子類主辦法========"+name);
       TestStatic  ts = new TestExtendStatic();
       ts.test();
       System.out.println("-------------------------");
       ts = new TestExtendStatic();
       ts.test();
    }
輸入:
========靜態法式塊======  父類中靜態法式塊
========子類靜態法式塊====== 子類中靜態法式塊
========子類主辦法========England 子類中主辦法
========辦法體========  父類中非靜態代碼塊
=========結構辦法======== 父類中結構辦法
========無稱號辦法體======== 子類中非靜態法式塊
=========子類結構辦法======== 子類中結構辦法
========子類測試辦法========= 對象詳細挪用的辦法
------------------------- 靜態變量和法式塊只履行一次
========辦法體======== 父類中非靜態代碼塊
=========結構辦法======== 父類中結構辦法
========無稱號辦法體======== 子類中非靜態代碼塊
=========子類結構辦法======== 子類中結構辦法
========子類測試辦法=========

假如將子類主辦法 中更改成:

TestStatic  ts = new TestStatic ();// 應用父類結構辦法創立
ts.test();
輸入為:
========靜態法式塊====== 父類靜態法式塊
========子類靜態法式塊====== 子類靜態法式塊 【由於法式在子類中運轉的,所以子類的靜態法式塊必需運轉】
========辦法體========  父類非靜態法式塊
=========結構辦法======== 父類結構辦法
========測試辦法========= 父類詳細辦法test()
假如將上述代碼放到父類中,就不會加載子類 靜態法式塊了。

經由過程下面 我們還可以發明,靜態法式塊運轉 是在主辦法之前,非靜態法式塊運轉是在主辦法以後。
我在父類中 主辦法中創立一個對象 挪用test(),運轉的成果:
========靜態法式塊====== 靜態代碼塊
===main==
========辦法體======== 非靜態代碼塊
=========結構辦法======== 結構辦法
========測試辦法=========

總結:
法式運轉時(一個類中),會第一時光加載運轉靜態代碼塊,一旦創立對象,就會履行非靜態代碼塊和無參結構辦法。 而在繼續中,法式運轉時 會先加載父類中靜態代碼塊 然後加載自己靜態代碼塊,一旦創立對象(應用子類結構辦法創立),就會挪用 父類非靜態代碼塊,父類結構辦法,然後就是自己 非靜態代碼塊,自己結構辦法。
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved