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類中非重寫的方法。