2017年3月11日 星期六

JAVA for 亭貽 屬性、變數、建構元 複習

首先,
先把屬性變數差異釐清,我稍微改了一下福哥的程式....

先看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);
   }
}
 









 

沒有留言:

張貼留言