google search
Google

目前分類:學習Java筆記 (4)

瀏覽方式: 標題列表 簡短摘要

今天在看程式碼時意外發現原來switch case可以這樣用,以前好像都沒注意到說呢!

看來他跟if else比起來也有不同的用途呢?

class Month{
    public static void main(String[] args){

        int test1=1;

        int test2=8;

        switch(test2){
        case 1:
        case 2:
        case 3:
            print("1 to 3");
            break;
        case 4:
        case 5:
        case 6:
            print("4 to 6");
            break;
        case 7:
        case 8:
        case 9:
            print("7 to 9");
            break;
        case 10:
        case 11:
        case 12:
            print("10 to 12");
            break;
        default:
            System.out.println("error");
        }
    }

    
    public static void print(String a){
        System.out.println("The unmber is in "+a +"scope");
    }
}

roczen2007 發表在 痞客邦 留言(2) 人氣()

預設建構子

當類別中沒有定義建構子時,編譯器會自動幫你產生一個無參數的建構子。


而這個建構子的權限與類別的權限相同。


如果你自行寫了一個建構子時,則JVM不會幫你建立預設建構子了。

此時也代表你不能再使用無參數建構子了,除非你自己也有寫一個無參數建構子。

在繼承時,如果你沒有使用super()指定父類別要使用哪一個建構子,則預設會找無參數建構子

引用自:http://caterpillar.onlyfun.net/Gossip/JavaGossip-V1/DefaultConstructor.htm

roczen2007 發表在 痞客邦 留言(0) 人氣()

不同package存取類別的Protected資料成員

package A;
public class Base{
    private int privateData=0;
    protected int protectedData=1;
    int packageData=2;
    public int publicData=3;

    public Base(){
    }    

    public void publicMethod(){
        System.out.format("publicMethod called%n");
    }

    private void privateMethod(){
        System.out.format("privateMethod called%n");
    }

    void packageMethod(){
        System.out.format("packageMethod called%n");
    }
    
    protected void protectedMethod(){
        System.out.format("protectedMethod called%n");
     }
}

package B;
import A.Base;
class Subclass extends Base{    
    public static void main(String[] args){
        Base b=new Base();
        //b.privateMethod();//illegal
        //b.packageMethod();//illegal
        //b.protectedMethod();//illegal
        b.publicMethod();//legal 不同package只能呼叫public成員

        //System.out.format("privateData:  %2d%n",b.privateData);//illegal
        //System.out.format("packageData:  %2d%n",b.packageData);//illegal
        //System.out.format("protectedData: %2d%n",b.protectedData);//illegal
        System.out.format("publicData: %2d%n",b.publicData);//legal

        Subclass s=new Subclass();

        s.publicMethod();//legal
        s.protectedMethod();//legal protected資料可由他的子類別存取
        System.out.format("protectedData: %2d%n",s.protectedData);//legal
        //s.packageMethod();//illegal
        //System.out.format("packageData: %2d%n",s.packageData);//illegal 跨package不能使用package變數

        //System.out.format("privateData:  %2d%n",s.privateData);//illegal private變數不能繼承

        
    }    

}

存取權限開放的大小

public > protected > package(default) > private

class的權限如未被開啟,則裡面的資料就算是public也不能被存取。

引用自http://life.csu.edu.au/java-tut/java/javaOO/accesscontrol.html

roczen2007 發表在 痞客邦 留言(0) 人氣()

存取控制有兩層:

第一層(頂端階層,類別階層)public,package-private(沒有修飾子)

 

第二層(成員階層)public,private,protectedpackage-private(沒有修飾子)

 

 

類別階層:

一個類別可以被宣告為public,在這樣的情況下他對任何類別都是可視的,

如果沒有修飾子(預設的package-private),他只對自己所屬的package是可視的。

 

成員階層:

在這個階層,你能使用public或不用修飾子(package-private)就如同你在類別階層使用它們的意義是一樣的。

 

另外在這個階層還有private protected兩個修飾子。

private     -    成員只能在自己所屬的類別底下被存取。

protected -   能在自己所屬的package底下被存取,

                     此外也能被一個在其他package底下但是卻是他的子類別所存取。

下列表格顯示對每個修飾子對成員的存取權限。

Modifier

Class

Package

Subclass

World

public

Y

Y

Y

Y

proctected

Y

Y

Y

N

no modifier

Y

Y

N

N

private

Y

N

N

N


classesaccess

舉一個例子來看,類別之間的關係如上圖,那Alpha成員被各種修飾子所修飾,結果他的成員在其他類別的可視性如下表。

 

          

Modifier

Alpha

Beta

AlphaSub

Gamma

public

Y

Y

Y

Y

proctected

Y

Y

Y

N

no modifier

Y

Y

N

N

private

Y

N

N

N

 

 


以上資料是來自:

http://download-llnw.oracle.com/javase/tutorial/java/javaOO/accesscontrol.html

 

roczen2007 發表在 痞客邦 留言(0) 人氣()