none
繼承的觀念,為什麼同時擁有父的物件和子的物件 RRS feed

  • 問題

  • b繼承a的textbox

     

    大大,在實作時,發生一個情況

    就是class b的tb變成b.tb而非a.tb

    請教各位大大,為什麼有時侯是a.tb有時侯卻是b.tb呢

    且為什麼會有a.tb和b.tb呢

    那是不是當宣告b時,也同時宣告了a,所以tb就有了兩個(a.tb;b.tb)呢

    本以為b繼承了a之後,就是a的物件+b再宣告的物件,可是好像不是這樣

    還是會受override影響還是??

    還請大大幫忙

    謝謝大大

    2007年10月1日 上午 07:27

解答

  • public class a

    {

    textbox tb;

    public virtual void add()

    {

    tb.text +="a";

    }

    }

     

    public class b:a

    {

    public override void add()

    {

    base.add();

    tb.text +="b";

    }

    }

    你原本的寫法會造成混淆

    在子代要呼叫父代的方法請用 base

     

    2007年10月1日 上午 08:25
  • 你的 class a 與 public int a、class b 與 private int b,會混淆

     

    (以下假設 Class A 與 Class B : A)

     

    (1)

    既然你知道 private int b 不可以被 B 繼承,那 B 又怎麼會有 b,且 A 的 b 既然是 private 又 B 如何知道 b?

     

    (2)

    既然是 Class B : A ,所以 B 擁有 A 的方法與變數

    public int a

    public void M1() {}

     

    Class B 擁有自己類別的方法

    private void M2() {}

     

    但是你 new 出來的 B 物件不能使用 M2 方法...

     

    (3)

    分別試試看

    A a = new A();

    B b = new B();

    A a = new B();

     

    分別可以存取什麼東西...

     

     

    2007年10月1日 上午 09:15

所有回覆

  • public class a

    {

    textbox tb;

    public virtual void add()

    {

    tb.text +="a";

    }

    }

     

    public class b:a

    {

    public override void add()

    {

    base.add();

    tb.text +="b";

    }

    }

    你原本的寫法會造成混淆

    在子代要呼叫父代的方法請用 base

     

    2007年10月1日 上午 08:25
  • 大大你好

    之前程式就是寫到混洧

    今天才曉得錯誤在於用到子的tb,若要用父的要加base後,

    就上來請教各位大大關於繼承的觀念

    因為有時侯沒有加base也可用到父的

     

    謝謝大大哦

     

     

    2007年10月1日 上午 08:30
  • Hellow :

     

    以你上面貼的Code來說,當你在宣告b時因該根本存取不到tb吧,tb宣告的修飾詞根本不對,子類別根本存取不到,

    還有建議你先了解this及base這兩個關鍵字,他們倆各在做繼承時分別代表什麼意義,另外再做override時這兩個關鍵字所存取的屬性,Void到底會有什麼不一樣。

    2007年10月1日 上午 08:36
  • 書店裡有一堆書等你去查 ...

    2007年10月1日 上午 08:36
    版主
  •  

    大大你好,以上貼的Code很草帥,抱歉

    base就是父裡頭的物件,這個我沒有問題

    this就是指現在這個class,我也沒有問題

     

    我也不是沒看書,就上來亂問一通

    書上寫著

    程式碼區塊

    class a

    {

    public int aa;

    private int bb;(只有public 才能被繼承的概念我了解)

    public void M1();

    }

    class b:a

    {

    private M2();

    }

     

     

    class b除了擁有自己的成員,還擁有class a的aa與MI

    因為書上這樣寫,所以我就以為宣告class b時就擁有

    程式碼區塊

    public int aa;

    private int bb;

    public void M1();

    private M2();

     

     

    可是卻發現

    class b不只擁有這些還擁有class a的一份,class b的一份

    程式碼區塊

    //a

    public int aa;

    private int bb;

    public void M1();

    //b

    public int aa;

    private int bb;

    public void M1();

    private M2();

     

     

    所以才發現自己從書上讀來的繼承觀念有錯

    才想請教大大,

    還請大大們幫忙,謝謝

    2007年10月1日 上午 08:50
  • 你的 class a 與 public int a、class b 與 private int b,會混淆

     

    (以下假設 Class A 與 Class B : A)

     

    (1)

    既然你知道 private int b 不可以被 B 繼承,那 B 又怎麼會有 b,且 A 的 b 既然是 private 又 B 如何知道 b?

     

    (2)

    既然是 Class B : A ,所以 B 擁有 A 的方法與變數

    public int a

    public void M1() {}

     

    Class B 擁有自己類別的方法

    private void M2() {}

     

    但是你 new 出來的 B 物件不能使用 M2 方法...

     

    (3)

    分別試試看

    A a = new A();

    B b = new B();

    A a = new B();

     

    分別可以存取什麼東西...

     

     

    2007年10月1日 上午 09:15
  • 大大你好

    第一點是筆誤

    第二點,

    (那個程式寫的很亂,所以沒有POSE上來)

     

    程式碼區塊
     

     

    A a = new A();只能使用A的物件

    B b = new B();A(public)和B的物件都能用

    A a = new B();只能使用A的物件

     

     

     

    1003發現,就是因為寫得太亂了,沒注意到就拿之前已建好的類別來更改

    所以才導致有兩個textbox,真是粗心,如今撥雲見日了^^

     

    謝謝大大們的幫忙~~^^

    2007年10月1日 上午 09:45