qileilove

          blog已經轉移至github,大家請訪問 http://qaseven.github.io/

          Java多態的內存機制

           學習java也快一年多了,看過很多方面的書,也喜歡在網絡上學習優秀的java資料。但是每當自己打開myeclipse時,總是那么的不自信…………,java基礎部分的內容自己以及掌握,并能很好運用,加油吧,多實踐,多總結,一定會有所突破的。老銀每天進步一點點。
            今天就總結一下,自己看過的資料上好的列子。
            1:java面向對象特征:抽象,封裝,繼承,多態。
            抽象:
            封裝:
            繼承:
            多態:
            寫一個類,來完成以上所包含的抽象,封裝,繼承內容
          class LaoYin extends Thread implements Runnable{
          private int  Number=1111111;
          private String name ="loayin";
          @Override
          public void run() {
          System.out.println("java學習者");
          }
          }
          java中通過重載,和重寫機制來實現多態。
          /**
          *
          * @author YXP 小技巧:當我們想讓類中的私有變量讓外界訪問到:使用SET();GET().
          * 簡單方法是選中這些變量,右鍵,source  然后Ganerate Gater and Seter,即可。
          *
          */
          public class DuoTai {
          String  name;
          int   age;
          public String getName() {
          return name;
          }
          public void setName(String name) {
          this.name = name;
          }
          public int getAge() {
          return age;
          }
          public void setAge(int age) {
          this.age = age;
          }
          public void cry(){
          System.out.println("不知道怎么叫");
          }
          public  static void main (String[] args){
          DuoTai an=new Cat();
          an.cry();
          DuoTai ni=new Dog();
          ni.cry();
          }
          }
          class Cat extends DuoTai{
          public void cry(){
          System.out.println("喵喵 ");
          }
          }
          class Dog extends DuoTai{
          public void cry(){
          System.out.println("汪汪叫");
          }
          }
           答案肯定是我們要的答案,父類調用子類的方法來為自己聲明對象。
            但是如果我們改變一下,關于類的成員變量,這里有很大的樂趣………………
            為每一個類聲明一個一樣的成員變量 count
            基類100,cat是5,dog是50;
            通過多態給基類聲明對象,然后通過對象進行調用變量。我們瞧瞧看。
          /**
          *
          * @author YXP 小技巧:當我們想讓類中的私有變量讓外界訪問到:使用SET();GET().
          * 簡單方法是選中這些變量,右鍵,source  然后Ganerate Gater and Seter,即可。
          *
          */
          public class DuoTai {
          String  name;
          int   age;
          int count=100;
          public String getName() {
          return name;
          }
          public void setName(String name) {
          this.name = name;
          }
          public int getAge() {
          return age;
          }
          public void setAge(int age) {
          this.age = age;
          }
          public void cry(){
          System.out.println("不知道怎么叫");
          }
          public  static void main (String[] args){
          DuoTai an=new Cat();
          an.cry();
          System.out.println(an.count);
          DuoTai ni=new Dog();
          System.out.println(ni.count);
          ni.cry();
          }
          }
          class Cat extends DuoTai{
          int count=5;
          public void cry(){
          System.out.println("喵喵 ");
          }
          }
          class Dog extends DuoTai{
          int count=50;
          public void cry(){
          System.out.println("汪汪叫");
          }
          }
            運行看看:F11
            喵喵
            100
            100
            汪汪叫
            現在我們就可以很好的明白多態的機制了,但是我有點暈了,對于這個用多態實現的對象,它內存中是如何實現的呢
            當然main棧區呢  有na  ni
            但堆內存中是什么樣的內???
            ni(棧內存)
            int count(自身的成員變量) 上下
            cry()子類覆寫的cry       (如何現實的不造,原理) 糾結的感覺
            只能是父類引用子類的構造函數,反過來不行。
            多態引用變量會調用子類的方法,但是堆內存上依然存儲的是自己的成員變量,只是方法指向了子類的方法嗎??。
            如果是指向子類的方法,那么子類必須要實現實例化,所以不成立
            如果子類中有父類不曾有的方法,看看ni還能不能調用,即可知道。
            答案不用說啦,編譯不能通過。
            ok,我感覺自己有點明白了一些,多態就是用子類的調用方法,來將子類中重寫的父類方法,讓父類調用。即父類對象的框架上,將子類的覆寫方法覆蓋父類的方法,當然父類類上不存在的方法,對象沒有內存空間存放子類方法,編譯自然就有問題了。總之,多態就是與覆寫方法有關,與成員變量無關。

          posted on 2014-06-30 18:28 順其自然EVO 閱讀(169) 評論(0)  編輯  收藏


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


          網站導航:
           
          <2014年6月>
          25262728293031
          1234567
          891011121314
          15161718192021
          22232425262728
          293012345

          導航

          統計

          常用鏈接

          留言簿(55)

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 黔东| 涟源市| 鄂尔多斯市| 汉中市| 永善县| 平南县| 武乡县| 额济纳旗| 海口市| 孝感市| 崇阳县| 武冈市| 凭祥市| 云梦县| 仙桃市| 全南县| 安庆市| 漳浦县| 四子王旗| 佛学| 花垣县| 武义县| 车致| 稻城县| 始兴县| 阿拉善左旗| 科尔| 丹阳市| 旬阳县| 舟山市| 天峨县| 农安县| 娄底市| 泸水县| 神木县| 西盟| 霍州市| 瓦房店市| 黔西县| 景宁| 阿勒泰市|