創作內容

1 GP

Lesson 9 : 封裝與建構式

作者:game2002│2010-06-09 01:53:53│巴幣:2│人氣:1324
單元目標
 
1. 利用封裝保護資料
2. 設計建構式來初始化物件
 
封裝的概念
 
封裝的重要性在於,避免重要的資料被不當地修改。以及避免垃圾資料的建立。
舉例來說,學生的座號通常是正整數從1號開始,所以在建立程式時,必須要有封裝的概念,
當程式接收到的座號資料為-1 時,就必須停止存取並且回報錯誤訊息。
 
使用封裝的概念,有兩個重點:
1. 重要的資料必須建立private 屬性,避免被不正當存取。
2. 使用set() and get() 這個公開方法來進行private 資料的存取。
 
下面以員工類別(Employee)為例:
 
step1 : 建立Employee 類別
public class Employee
{
         private int EmployeeID;    // 權限修飾使用private ,將EmployeeID屬性改為私有屬性。
         public void setEmployeeID(int i)   // 使用公開方法的set()
         {
                  if(i<0)
                  {
                      System.out.println("incorrect ID");
                  }else
                  {
                      EmployeeID = i ;
                  }
         }
         public int getEmployeeID()  // 使用公開方法的get()
         {
                   return EmployeeID;
         }
}
H : private 與 set() & get() 幾乎是會一起出現的,另外如果用了set(),一定要記得寫出get()喔。
      因為兩個是一組的。只有符合set () 方法所設定的條件,才會存取並且讓get() 方法使用並輸出。
 
step2 : 建立EmployeeTest 類別
public class EmployeeTest
{
          public static void main(String[] args) // main主程式一定要寫出來喔
          {
                     Employee emp = new Employee(); // 物件參考變數的宣告與初始化也是一定要的
                     emp.setEmployeeID(64);   // 請在()中填入員工編號
                     System.out.println(emp.getEmployeeID());
          }
}
 
若是要有使用者輸入的選項,則可以修正為:
Employee 類別:
public class Employee {
private int EmployeeID;
    public void setEmployeeID(int i)
    {               
            if(i<0)
            {
                System.out.println("ID不正確");
            }else
            {
                EmployeeID = i;
            }
        
    }
    public int getEmployeeID()
    {
        return EmployeeID;       
    }
    public void f1()
    {
        System.out.println("您的員工ID是:"+EmployeeID);
    }
}
 
EmployeeTest 類別:
public class EmployeeTest {
    public static void main(String[] args)  // main主程式一定要寫出來喔
    {
               java.util.Scanner scanner = new java.util.Scanner(System.in); // 此為製作輸入選項必用的程式
                            System.out.println("請輸入工號");  
                            int a= scanner.nextInt();  // 建立一個可以自由輸入值的變數a
              Employee emp = new Employee();
              emp.setEmployeeID(a);  // 讓setEmployeeID()自動取得a值
              emp.f1(); // 呼叫Employee類別中的f1方法,不懂的請看Lesson 8 的文章
       
    }
}
建構式(constructor)
 
預設建構式:
法則: 當類別內沒有寫入任何建構式時, 程式會自動建立一個預設建構式( H : 但是使用者看不到)
          當類別內有寫入一個或是一個以上的建構式時, 程式不會自動產生一個新的預設建構式.
          建構式並不會被繼承到子類別中.

1. 建構式語法:
    [modifiers] class ClassName
    {
          [modifiers]  ConstructorName([arguments])
          {
            code_block;
          }
    }
[modifiers] : 表示權限修飾值
ConstructorName : 是建構式的名稱,必須與類別名稱相同
[arguments] : 表示要傳給建構式的一個或多個引數
 
使用範例:
讓我們以先前的Employee類別來做範例。如果封裝的概念使用建構式會如何?
 
Employee 類別
public class Employee {
    public Employee(int i)  // 建構式在此
    {
         EmployeeID = i;
    }
private int EmployeeID;
    public void setEmployeeID(int i)
    {               
            if(i<0)
            {
                System.out.println("ID不正確");
            }else
            {
                EmployeeID = i;
            }
        
    }
    public int getEmployeeID()
    {
        return EmployeeID;       
    }
    public void f1()
    {
        System.out.println("您的員工ID是:"+EmployeeID);
    }
}
 
 
EmployeeTest 類別
public class EmployeeTest {
    public static void main(String[] args) {
    java.util.Scanner scanner = new java.util.Scanner(System.in);
        System.out.println("請輸入工號");
        int a= scanner.nextInt();
    Employee emp = new Employee(a); // 直接在()中填入變數a
        //emp.setEmployeeID(a);
        emp.f1();
       
}
}
 

作業:
請利用封裝與建構式的概念,建立Employee類別中的員工姓名,並且不可以為空字串。

ANS :

Emplotee 類別如下:

public class Employee {
     public Employee(int i,String n)
     {
           EmployeeID = i;
           EmployeeName = n;
     }
    private int EmployeeID;
    private String EmployeeName;
      public void setEmployeeID(int i)
     {               
                 if(i<0)
             {
                     System.out.println("ID不正確");
             }else
             {
                  EmployeeID = i;
             }
        
     }
      public int getEmployeeID()
     {
          return EmployeeID;       
     }

      public void setEmployeeName(String n)
     {
              if(n=="")
         {
                  System.out.println("名字不可以為空字串");
         }else
         {
                  EmployeeName = n;
         }

     }

     public String getEmployeeName()
     {
            return EmployeeName;
     }

     public void f1()
     {
            System.out.println("您的員工ID是:"+EmployeeID);
     }
     public void f2()
     {
            System.out.println("您的員工姓名是:"+EmployeeName);
     }

}


EmployeeTest類別:

public class EmployeeTest {
             public static void main(String[] args) {
             java.util.Scanner scanner = new java.util.Scanner(System.in);

                 System.out.println("請輸入工號");
                 int a= scanner.nextInt();
                 System.out.println("請輸入姓名");
                 String b = scanner.next();
             Employee emp = new Employee(a,b);
        
                 emp.f1();
                 emp.f2();
   }

}


引用網址:https://home.gamer.com.tw/TrackBack.php?sn=341332
All rights reserved. 版權所有,保留一切權利

相關創作

同標籤作品搜尋:|Java|constructor|封裝|建構式|

留言共 0 篇留言

我要留言提醒:您尚未登入,請先登入再留言

1喜歡★gameculb2002 可決定是否刪除您的留言,請勿發表違反站規文字。

前一篇:Lesson8 : 方法... 後一篇:轉載 : 【心得】戰神3...

追蹤私訊切換新版閱覽

作品資料夾

hyzgdivina喜歡虹咲的LLer
我的小屋裡有很多又香又甜的Hoenn繪師虹咲漫畫翻譯喔!歡迎LoveLiver來我的小屋裡坐坐~看更多我要大聲說昨天14:16


face基於日前微軟官方表示 Internet Explorer 不再支援新的網路標準,可能無法使用新的應用程式來呈現網站內容,在瀏覽器支援度及網站安全性的雙重考量下,為了讓巴友們有更好的使用體驗,巴哈姆特即將於 2019年9月2日 停止支援 Internet Explorer 瀏覽器的頁面呈現和功能。
屆時建議您使用下述瀏覽器來瀏覽巴哈姆特:
。Google Chrome(推薦)
。Mozilla Firefox
。Microsoft Edge(Windows10以上的作業系統版本才可使用)

face我們了解您不想看到廣告的心情⋯ 若您願意支持巴哈姆特永續經營,請將 gamer.com.tw 加入廣告阻擋工具的白名單中,謝謝 !【教學】