先把屬性和變數差異釐清,我稍微改了一下福哥的程式....
先看ABD
AB為屬性
D為變數
如何判別?基本上就是
只要在CLASS 不在函數(包含main主人)內的都是屬性
另外! 如果在class建立 若輸入成 double p=3.14
在double前面沒輸入任何的 private public protected 那麼就是預設(default) 寫成(default) double p=3.14
default 基本上與public 是相同的
唯一不同在於 public 是可以對於不同資料夾公開
但default 只能在同個資料夾使用
也就是說,default不能在不同資料夾被呼叫 而public 可以
接下來剩下C的部分
super();//呼叫父程式 無論是否有寫
只要繼承必定在建構元第一列出現
我們知道 Coin繼承了Circle
所以當main開始創立 coin1 的並把2.5和10傳入Coin時,
因為super();的關係,會先跑去找"父程式" 的建構元,
那如果我們不加 public Circle(){
}
我們也知道若不加,系統雖然會幫我們加,但在呼叫
super();"父程式" 系統必定會指定到Class Circle看不到的建構元,
仔細看一下 我們傳了double 2.5和 int 10 這兩個參數,會完全對不到Circle的建構元,所以在編譯就出錯了....
為了彌補 所以才補上去,讓系統在編譯時,就知道沒有對應的參數
複習一下 public default proected private封鎖程度(大到小)
1.public 意旨對外公開,任何人都可以呼叫取用包含其他資料夾的程式
2.(default) 與public 大致相同,唯一不同就是不同資料夾不能被取用
3.protected 意旨只有被繼承或相同class,才能取用
4.private 意旨只有對class類別公開,其他不同class不能任意取用
最後附上程式碼
class Circle{ private static double p=3.14; private double rad; public Circle(){ } public Circle(double r){ rad=r; } public void setRadius(double r){ rad=r; System.out.println("radius="+rad); } } class Coin extends Circle{ private int value; public Coin(double r, int v){ super(); int x=233333; setRadius(r); value=v; System.out.println("value="+value); System.out.println(x); } } public class app10_3{ public static void main(String args[]){ Coin coin1=new Coin(2.5,10); } }