程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> JAVA綜合教程 >> 轉型操作並不改變對象在內存的形式,轉型並不對象形式

轉型操作並不改變對象在內存的形式,轉型並不對象形式

編輯:JAVA綜合教程

轉型操作並不改變對象在內存的形式,轉型並不對象形式


 1 /*
 2     需求:設計一個簡單的java程序,證明強制轉換語句並不能改變其在內存中的形式
 3     思路:設計一個父子類,創建子類對象,將子類向上轉型,查看轉型前後該對象在內存中是否發生變化
 4 */
 5 
 6 class  ExchangeTest
 7 {
 8     public static void main(String[] args) 
 9     {
10         Child c = new Child(23);
11         System.out.println(c);
12         Father f = (Father)c;
13         c.show();
14         f.show();
15         System.out.println(f);//c和f都是指向了內存中同一個對象,且該對象是Child的實例對象
16     }
17 }
18 
19 class Father
20 {
21     int worknum;
22     Father(int i){
23         worknum = i;
24     }
25     void show(){
26         System.out.println("Father " + worknum);
27     }
28 }
29 
30 class Child extends Father
31 {
32     int studynum;
33     Child(int i){
34         super(i);
35         studynum = i;
36     }
37     void show(){
38         System.out.println("Child " + studynum);
39     }
40 }
41 
42 
43 /*
44 總結:
45     將子類向上轉型後,子類對象在內存中依舊是子類對象,即使一個父類變量指向該對象後,該對象依舊是子類對象。
46 
47 
48 運行時出現的bug
49 -----------------------------------------------------------------------------------
50 ExchangeTest.java:31: 錯誤: 無法將類 Father中的構造器 Father應用到給定類型;
51         Child(int i){
52                     ^
53   需要: int
54   找到: 沒有參數
55   原因: 實際參數列表和形式參數列表長度不同
56 1 個錯誤
57 
58 錯誤原因:   子類構造函數Child(int i){}中首行有個隱藏的默認語句super();該語句會調用
59             父類的空參構造函數,因為父類寫了Father(int i){}  所以原來隱藏的Father(){}
60             沒有了,因此子類構造函數中的super()找不到Father(){}  因此報錯
61 -----------------------------------------------------------------------------------
62 */
結果:

  

總結:
   將子類向上轉型後,子類對象在內存中依舊是子類對象,即使一個父類變量指向該對象後,該對象依舊是子類對象。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved