C#用子類執行個體化父類

來源:互聯網
上載者:User

class jk
{int a=1;
public void fun1()
{
System.out.println("父類funl()") ;
}
public void fun2()
{
System.out.println("父類fun2()") ;
}
} // Student類擴充自jk類,也就繼承了jk類中的fun1()、fun2()方法 class Student2 extends jk
{int a=4;
char c=45;
// 在這裡複寫了jk類中的fun1()方法
public void fun1()
{
System.out.println("子類fun1()") ;
}
public void fun3()
{
System.out.println("子類新方法fun3()") ; }
} public class 實驗
{
public static void main(String[] args)
{
// 此處,父類對象由子類執行個體化
jk p = new Student2() ;
// 調用fun1()方法,觀察此處調用的是哪個類裡的fun1()方法
p.fun1() ;
p.fun2() ;
System.out.println("a="+p.a);
}
}
輸出:子類fun1()
父類fun2()
a=1
以上fun1()方法經過複寫了所以輸出“子類fun1()”,但是屬性a也複寫成4了啊為什麼輸出還是原來的1
還有不能調用p.fun3()和p.c,否則編譯不讓通過,這裡的p應該就是個引用吧,就是儲存了執行個體化的地址。
請大家說說其中的執行個體化過程到低是怎麼樣的,謝謝!

 

既然你知道對象,和引用
那你應該明白兩者的關係
new 什麼,就是什麼對象
所以,你這裡只有子類 Student2 的對象,而沒有父類 jk 的對象
你只是讓父類引用指向了子類對象
在父類引用指向子類對象時,不能訪問子類新加的方法

System.IO.Stream fromFile = new FileStream(srcImgPath, FileMode.Open);

//這是一個資料抽象化的概念 java中把這個叫上轉型,比如:
class A,class B,B繼承了A,執行個體化的時候A a= new B(); a就叫上轉型對象,
對於執行個體a(上轉型對象),它不能操作B新增的成員變數(失掉了這部分屬性),;不能使用B類新增的方法(失掉了一些功能)也就是B類中非重寫的方法。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.