性格決定命運,氣度影響格局
          posts - 20, comments - 18, trackbacks - 0, articles - 1
            BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理
          java入門與加深 系列 相關文章
          (轉) java入門與加深 -- 1.基礎篇
          (轉) java入門與加深 -- 2.命令篇  
          (轉) java入門與加深 -- 3.I/O篇  
          (轉) java入門與加深 -- 4.關鍵字篇
          (轉) java入門與加深 -- 5.面向對象篇
          (轉) java入門與加深 -- 6.java.util篇

          34 extends和implements有什么不同?
            答:extends用于(單)繼承一個類(class),而implements用于實現一個接口(interface)。
            interface的引入是為了部分地提供多繼承的功能。
            在interface中只需聲明方法頭,而將方法體留給實現的class來做。
            這些實現的class的實例完全可以當作interface的實例來對待。
            有趣的是在interface之間也可以聲明為extends(單繼承)的關系。

          35 java怎么實現多繼承?
            答:java不支持顯式的多繼承。
            因為在顯式多繼承的語言例如c++中,會出現子類被迫聲明祖先虛基類構造函數的問題,

            而這是違反面向對象的封裝性原則的。
            java提供了interface和implements關鍵字來部分地實現多繼承。參見34。

          36 abstract是什么?
            答:被聲明為abstract的方法無需給出方法體,留給子類來實現。
            而如果一個類中有abstract方法,那么這個類也必須聲明為abstract。
            被聲明為abstract的類無法實例化,盡管它可以定義構造方法供子類使用。

          37 public,protected,private有什么不同?
            答:這些關鍵字用于聲明類和成員的可見性。
            public成員可以被任何類訪問,
            protected成員限于自己和子類訪問,
            private成員限于自己訪問。
            Java還提供了第四種的默認可見性,當沒有任何public,protected,private修飾時,成員是包內可見
            類可以用public或默認來修飾。

          38 Override和Overload有什么不同?
            答:Override是指父類和子類之間方法的繼承關系,這些方法有著相同的名稱和參數類型。
            Overload是指同一個類中不同方法(可以在子類也可以在父類中定義)間的關系,這些方法有著相同的名稱和不同的參數類型。

          39 我繼承了一個方法,但現在我想調用在父類中定義的方法。
            答:用super.xxx()可以在子類中調用父類方法。

          40 我想在子類的構造方法中調用父類的構造方法,該怎么辦?
            答:在子類構造方法的第一行調用super(...)即可。

          41 我在同一個類中定義了好幾個構造方法并且想在一個構造方法中調用另一個。
            答:在構造方法第一行調用this(...)。

          42 我沒有定義構造方法會怎么樣?
            答:自動獲得一個無參數的構造方法。

          43 我調用無參數的構造方法失敗了。
            答:如果你至少定義了一個構造方法,就不再有自動提供的無參數的構造方法了。
            你需要顯式定義一個無參數的構造方法。

          44 我該怎么定義類似于C++中的析構方法(destructor)?
            答:提供一個void finalize()方法。在Garbarge Collector回收該對象時會調用該方法。
            注意實際上你很難判斷一個對象會在什么時候被回收。作者從未感到需要提供該方法。

          45 我想將一個父類對象轉換成一個子類對象該怎么做?
            答:強制類型轉換。如
            public void meth(A a)
            {
            B b = (B)a;
            }
            如果a實際上并不是B的實例,會拋出ClassCastException。所以請確保a確實是B的實例
            。

          46 其實我不確定a是不是B的實例,能不能分情況處理?
            答:可以使用instanceof操作符。例如
            if( a instanceof B )
            {
            B b = (B)a;
            }
            else
            {
            ...


            }

          47 我在方法里修改了一個對象的值,但是退出方法后我發現這個對象的值沒變!
            答:很可能你把傳入參數重賦了一個新對象,例如下列代碼就會造成這種錯誤:
            public void fun1(A a) //a是局部參數,指向了一個外在對象。
            {
            a = new A(); //a指向了一個新對象,和外在對象脫鉤了。如果你要讓a作為傳
            出變
            量,不要寫這一句。
            a.setAttr(attr);//修改了新對象的值,外在對象沒有被修改。
            }
            基本類型也會出現這種情況。例如:
            public void fun2(int a)
            {
            a = 10;//只作用于本方法,外面的變量不會變化。
            }

          評論

          # re: java入門與加深 -- 5.面向對象篇 轉載  回復  更多評論   

          2007-10-30 15:51 by 尚小豬豬
          好東西,謝謝版主,嘎嘎!!!!

          只有注冊用戶登錄后才能發表評論。


          網站導航:
          博客園   IT新聞   Chat2DB   C++博客   博問  
           
          主站蜘蛛池模板: 湖口县| 高平市| 剑阁县| 高密市| 容城县| 湾仔区| 朝阳市| 沈阳市| 铜山县| 宝清县| 长春市| 永修县| 二连浩特市| 扎鲁特旗| 榆中县| 衡东县| 郎溪县| 和平区| 旬邑县| 通化市| 黔西县| 沁源县| 博白县| 通州区| 古丈县| 西和县| 淮安市| 宁远县| 宁蒗| 哈巴河县| 永嘉县| 瓦房店市| 松溪县| 邵阳县| 平乐县| 江门市| 来凤县| 昌乐县| 农安县| 称多县| 叙永县|