SlideShare uma empresa Scribd logo
1 de 109
Baixar para ler offline
บทท 6
การพฒนาโปรแกรมภาษาจาวาเชงออบเจกต
   (Object Oriented Java Programming)

          ผศ.ธนศา เคร$อไวศยวรรณ
          คณะเทคโนโลย.สารสนเทศ
สถาบนเทคโนโลย.พระจอมเกล5าเจ5าค6ณทหารลาดกระบง
วตถประสงค
อธบายเมธอด และการเรยกใช$เมธอด

อธบายคยเวรดทใช$เป%น          modifier ของเมธอด
แนะน'าการเขยนโปรแกรมภาษาจาวาเชงออบเจกต

อธบายคณลกษณะเด=นของโปรแกรมเชงออบเจกต

อธบายความหมายของ             Constructor
   แนะนDาคลาสประเภท Wrapper
   อธบายเมธอดของคลาสท.Fช$Fอ Object
   ค.ยGเวรGดอ$Fนๆ ท.FสDาคญ
   แนะนDาคลาสภายใน Generic และ คDาสFง Annotation
รKปแบบการเรยกใช$เมธอด
ร*ปแบบของคDาสFงท.ม.การเร.ยกใช5เมธอดเปLนดงน.M
                  F
   obj.methodName([arguments]);
 arguments อาจจะเปLนข$อม*ลค+าคงทหร-อตวแปร

ชนดข5อมKลของ arguments ท.Fใช5ในการเร.ยกเมธอด จะต$องสอดคล$องกน
  กบชนดข5อมKลของ arguments ของเมธอด
การเร.ยกใช5เมธอด
เมธอดท.FกDาหนดขNMนในคลาสใดๆสามารถเร.ยกใช5งานได5สองรKปแบบค$อ
   •   การเร.ยกใช5งานจากคลาสท.ต=างกน
                              F
   •   การเร.ยกใช5งานภายในคลาสเด.ยวกน
การเร.ยกใช5เมธอดจากคลาสท.Fตางกน จะต5องม.การสร5างอPอบเจกตGของคลาส
                            =
  ท.Fม.เมธอดท.FจะถKกเร.ยกใช5งานก=อน จNงจะสามารถเร.ยกใช5เมธอดได5
การเร.ยกใช5เมธอดภายในคลาสเด.ยวกน ในบางกรณ.จะสามารถทDาได5โดยไม=
  จDาเปLนต5องสร5างอPอบเจกตGของคลาสขNนมาก=อน และสามารถเร.ยกเมธอดได5
                                    M
  ท6กเมธอด
ตวอย+างโปรแกรมทม.การเร.ยกใช5เมธอดจากคลาสต=างกน
public class NumericalClass {
    public void calculate() {
            double score = Math.random()*100;
            if (score >= 80) {
                System.out.println("Grade is A");
            } else if (score >= 70) {
                System.out.println("Grade is B");
            } else if (score >= 60){
                System.out.println("Grade is C");
            } else if (score >= 50){
                System.out.println("Grade is D");
            } else {
                System.out.println("Grade is F");
            }
    }
}
ตวอย+างโปรแกรมทม.การเร.ยกใช5เมธอดจากคลาสต=างกน

public class MyMain {
    public static void main(String args[]) {
            NumericalClass obj = new NumericalClass();
            obj.calculate();
    }
}
ตวอย+างโปรแกรมทม.การเร.ยกใช5เมธอดในคลาสเด.ยวกน
public class NumericalClass {
    public void calculate() {
            double score = Math.random()*100;
            if (score >= 80) {
                System.out.println("Grade is A");
            } else if (score >= 70) {
                System.out.println("Grade is B");
            } else if (score >= 60){
                System.out.println("Grade is C");
            } else if (score >= 50){
                System.out.println("Grade is D");
            } else {
                System.out.println("Grade is F");
            }
    }
    public void callMethod() {
            calculate();
    }
}
การส=งผ+าน argument
กรณทเมธอดม argument ทจะรบค+าเพ$อนDาไปใช5ในเมธอด อาทเช+น
                                F
   public void setGPA(double GPA) {
       ...
   }
ค'าสงท.เรยกใช5เมธอดน0 จะต$องส+ง argument ท.Fมชนดข5อมKลเปLน double
        F                                     .
 ไปพร5อมกบช$Fอเมธอด เช=น setGPA(3.0);
ตวอย+างโปรแกรม
public class Student {
    String id;
    String name;
    double gpa;
    public void setGPA(double GPA) {
        gpa = GPA;
    }
    public double getGPA() {
        return gpa;
    }
}
--------------------------------------------------------------
public class MyMain2 {
    public static void main(String args[]) {
        Student s1 = new Student();
        s1.setGPA(3.0);
    }
}
argument ของเมธอด
argument ของเมธอดจะม.ชนดข5อมKลเปLนสองแบบตามชนดข5อมKลของ
  ตวแปรดงน.M
   •   argument ท.Fม.ชนดข5อมKลแบบพ$Mนฐาน
   •   argument ท.Fม.ชนดข5อมKลแบบอ5างอง
ในกรณ.ของ argument ท.Fม.ชนดข5อมKลแบบพ$นฐาน เราสามารถท.Fจะส=งค=าคงท.F
                                       M
  ข5อมKล ตวแปร หร$อนพจนGให5กบ argument ได5 ตวอย=างเช=น
   •   ค=าคงท.ข5อมKล เช=น
              F
            s1.setGPA(3.0);
   •   ตวแปร เช=น
            double x = 3.0;
            s1.setGPA(x);
   •   นพจนG เช=น
            s1.setGPA(3.0+0.05);
argument ทมชนดข$อม*ลแบบอ$างอง
เราจะต5องส=งอPอบเจกตGท.Fม.ชนดข5อมKลท.สอดคล5องไปเท=านMน
                                      F
ยกเว5นกรณ.ท.F argument นMนม.ชนดข5อมKลเปLน String ซNFงในกรณ.นจะ
                                                             .M
  สามารถส=งข5อมKลค=าคงท.ได5
                        F
ตวอย+างโปรแกรมทม.การส=ง argument ท.เปLนอPอบ
                                   F
                  เจกตG
 public class StudentV1 {
     String id;
     String name;
     MyDate dob;

      public void setDOB(MyDate d) {
         dob = d;
      }
      public MyDate getDOB() {
         return dob;
      }
 }
 ------------------------------------------------------------------------------------------
 public class TestStudentV1 {
      public static void main(String args[]) {
         StudentV1 s1 = new StudentV1();
          MyDate d1 = new MyDate(16, 12, 1980);
         s1.setDOB(d1);
      }
 }
ตวอย+างโปรแกรมคลาส MyDate
public class MyDate {
    private int day;
    private int month;
    private int year;

    public MyDate(int d, int m, int y) {
        day = d;
        month = m;
        year = y;
    }
    public void setDay(int d) {
        day = d;
    }
    public void setMonth(int m) {
        month = m;
    }
    public void setYear(int y) {
        year = y;
    }

    public void showDetails() {
        System.out.println("Date : " + day + "/" + month + "/" + year);
    }
}
ชนดข5อมKลและจDานวนของ argument
ชนดข5อมKลของ argument   ท.จะส=งผ=านไปยงเมธอดไม=จDาเปLนท.Fจะต5องเปLน
                           F
  ชนดข5อมKลเด.ยวกน แต=ตองเปLนชนดข5อมKลท.Fสามารถแปลงข5อมKลให5กว5างขNMน
                       5
  ได5โดยอตโนมต
เมธอดใดๆอาจม. argument สDาหรบรบค=ามากกว=าหนNงตว แต=การเร.ยกใช5
                                             F
  เมธอดเหล=าน.Mจะต5องส=ง argument ท.ม.ชนดข5อมKลท.Fสอดคล5องกนและม.
                                    F
  จDานวนเท=ากน
ตวอย+างโปรแกรมทม.การส=ง argument จDานวนสองตว
  public class NumericalSample {
      public void calMax(int i, double d) {
            if (i > d) {
               System.out.println("Max = "+i);
            } else {
               System.out.println("Max = "+d);
            }
      }
      public static void main(String args[]) {
            NumericalSample obj = new NumericalSample();
            obj.calMax(3,4.0);
      }
  }
การเปล.Fยนแปลงค=าของ argument
การส=ง argument  ท.มชนดข$อม*ลเป%นแบบพ-นฐาน หากมการเปลยนแปลงค+า
                    F                  0
  ของ argument ภายในเมธอดทถ*กเรยกใช$งาน จะไม+มผลท'าให$ค+าของ
  argument ทส+งไปเปลยนค+าไปด$วย
การส=ง argument ท.มชนดข$อม*ลเป%นแบบอ$างอง จะเป%นการส+งต'าแหน+ง
                   F
  อ$างองของออบเจกตไปให$กบเมธอดทถ*กเรยกใช$งาน ดงน0นการเปลยนแปลง
  ค+าของคณลกษณะของอPอบเจกตGจะมผลท'าให$ค+าของคณลกษณะของออบ
  เจกตทส+งไปเปลยนไปด$วย
ตวอย+างโปรแกรมทแสดงการเปล.Fยนแปลงค=าของ argument

 public class ArgumentPassing {
     public void method1(int x) {
         x = 3;
     }

    public void method2(MyDate d) {
            d.setDay(1);
            d.setMonth(1);
            d.setYear(2002);
        }

    public int method3() {
        return 0;
    }
ตวอย+างโปรแกรมทแสดงการเปล.Fยนแปลงค=าของ argument
       public static void main(String args[]) {
               int x = 4;
               ArgumentPassing obj = new ArgumentPassing();
               MyDate d1 = new MyDate(16, 12, 1980);
               obj.method1(x);
               System.out.println("x = " + x);
               obj.method2(d1);
               d1.showDetails();
               obj.method3();
       }
 }
การรบค=าท.Fสงกลบมาจากเมธอด
                          =
เมธอดใดๆของคลาสสามารถท.Fจะม.ค=าท.ส=งกลบมาได5 ซNFงชนดข5อมKลของค=าท.F
                                  F
  จะส=งกลบอาจเปLนชนดข5อมKลแบบพ$Mนฐาน หร$อเปLนชนดข5อมKลแบบอ5างอง
เมธอดท.Fม.ค=าท.Fจะส=งกลบมาจะต5องม.คDาสFง return ซNFงจะระบ6ค=าท.Fสงกลบ
                                                                  =
  โดยม.รKปแบบดงน.M
           return value;

คDาสFงท.เร.ยกใช5เมธอด อาจจะรบค=าท.FสงกลบมาเกPบไว5ในตวแปรหร$อเปLนตว
         F                           =
  ถKกดDาเนนการในนพจนG ตวอย=างเช=น
           double d = getGPA();
           System.out.println("GPA:"+getGPA());
modifier ของเมธอด
modifier ของเมธอดประกอบด5วย
    •   access modifier
    •   static
    •   abstract
    •   synchronized
    •   final


access modifier ใช5เพ$อระบ6ระดบการเข5าถNง โดยม.ค.ยGเวรGดต=างๆดงน.M
                       F
    •   public
    •   protected
    •   private
    •   default (ไม+ระบ ค.ยเวรGดใดๆ
                      บ6 G            )
ตวอย+างโปรแกรมทแสดงการประกาศเมธอดและค6ณลกษณะ
 public class PrivateStudent {
     private String id;
     private String name;
     private double gpa;

     public void setDetails(String ID,String n,double GPA) {
         id = ID;
         name = n;
         gpa = GPA;
     }

     public void showDetails() {
         System.out.println("ID: "+id);
         System.out.println("Name: "+name);
         System.out.println("GPA: "+gpa);
     }
 }
ตวอย+างโปรแกรมทแสดงการประกาศเมธอดและค6ณลกษณะ
 public class TestPrivateStudent {
      public static void main(String args[]) {
        PrivateStudent ps = new PrivateStudent();
        /*   ps.id = "12345";           illegal
             ps.name = "Thana";     illegal
         ps.gpa = 3.25;         illegal */
        ps.setDetails("12345","Thana",3.25);
        ps.showDetails();
      }
 }
การเข.ยนโปรแกรมโดยใช5หลกการของการห=อห65ม
ค6ณลกษณะเด=นของโปรแกรมเชงอPอบเจกตGม.อยK=สามอย=างค$อ การห=อห6ม
                                                             5
  การส$บทอด และการม.ได5หลายรKปแบบ
ข5อด.ของการห=อห65มประการหนNFงค$อการซ=อนเร5นข5อมKล

หลกการห=อห65มของอPอบเจกตGทDาได5ดงน.M
   •   กDาหนดค6ณลกษณะของอPอบเจกตGให5ม. modifier เปLน private เพ$Fอซ=อนไม=ให5อPอบ
       เจกตGอ$Fนๆเร.ยกใช5ได5
   •   กDาหนดเมธอดของอPอบเจกตGทตองการให5อPอบเจกตGอ$Fนๆเร.ยกใช5ให5ม. modifier เปLน
                               .F 5
       public
ตวอย+างโปรแกรมท.Fไม=ได5ใช5หลกการของการห=อห65ม
public class Student {
    String ID;
    String name;
    public double gpa;
}
--------------------------------------------------------------------------------------------------
public class NoEncapDemo {
    public static void main(String args[]) {
        Student s1 = new Student();
        double temp = Double.parseDouble(args[0]);
        if ((temp<0) || (temp>4.00)) {
            System.out.println("Incorrect Format!");
        } else {
            s1.gpa = temp;
            System.out.println("GPA: "+s1.gpa);
        }
    }
}
เมธอดแบบ setter
เมธอดแบบ accessor แบ=งออกได5เปLนสองประเภทค$อ
   •   เมธอดแบบ setter
   •   เมธอดแบบ getter
เมธอดแบบ setter จะใช5ในการกDาหนดค=าของค6ณลกษณะ

โดยทFวไปช$Fอของเมธอดแบบ setter จะขNนต5นด5วยคDาว=า set แล5วตามด5วยช$Fอ
                                    M
  ของค6ณลกษณะ ซNFงม.รปแบบดงน.M
                     K
          public void setAttributeName(dataType arg) {
             attributeName = arg;
           }
ตวอย+างโปรแกรมท.Fใช5หลกการของการห=อห65ม
public class Student {
    String ID;
    String name;
    private double gpa;
    public void setGPA(double GPA) {
         if ((GPA<0) || (GPA>4.00)) {
             System.out.println("Incorrect Format!");
         } else {
             gpa = GPA;
         }
    }
    public double getGPA() {
         return gpa;
    }
}

--------------------------------------------------------------------------------------------------
public class EncapDemo {
    public static void main(String args[]) {
         Student s1 = new Student();
         double temp = Double.parseDouble(args[0]);
         s1.setGPA(temp);
         System.out.println("GPA: "+s1.getGPA());
    }
}
เมธอดแบบ getter
เมธอดแบบ getter จะใช5ในการเร.ยกค=าของค6ณลกษณะ

โดยทFวไปช$Fอของเมธอดแบบ getter จะขNMนต5นด5วยคDาว=า get แล5วตามด5วยช$Fอ
  ของค6ณลกษณะ ซNFงม.รปแบบดงน.M
                     K
         public dataType getAttributeName() {
           return attributeName;
         }
ตวอย+างโปรแกรมท.Fใช5หลกการของการห=อห65ม
public class EncapStudent {
    private String id;
    private String name;
    private double gpa;
    public void setID(String ID) {
        id = ID;
    }
    public void setName(String n) {
        name = n;
    }
    public void setGPA(double GPA) {
        if ((GPA<0) || (GPA>4.00)) {
            System.out.println("Incorrect Format!");
        } else {
            gpa = GPA;
        }
    }
ตวอย+างโปรแกรมท.Fใช5หลกการของการห=อห65ม
       public String getID() {
          return id;
       }
       public String getName() {
          return name;
       }
       public double getGPA() {
               return gpa;
       }
}
ค.ยเวรGด this
                              G
ค.ยเวรGด this   หมายถNงอPอบเจกตGของตวเอง
เราสามารถท.จะเร.ยกใช5เมธอดหร$อค6ณลกษณะภายในคลาสได5โดยใช5
            F
  ค.ยGเวรGด this ซNFงม.รปแบบดงน.M
                        K
           this.methodName();
           this.attributeName

โดยทFวไปเราจะไม=ใช5ค.ยเวรGด this ในคDาสFง ยกเว5นในกรณ.ท.FจDาเปLน
                       G
ตวอย+างโปรแกรมการใช$ this
public class ThisStudent {
    private String id;
    private String name;
    private double gpa;
    public void setDetails(String id,String name, double gpa) {
        this.id = id;
        this.name = name;
        this.gpa = gpa;
    }
    public void showDetails() {
        System.out.println("ID: "+this.id);
        System.out.println("Name: "+name);
        System.out.println("GPA: "+gpa);
    }
}
การเข.ยนโปรแกรมโดยใช5หลกการของการส$บทอด
ข5อด.ของการส$บทอดค$อ การนDาคลาสท.Fม.อยK=แล5วมาใช5ใหม=โดยการเพFมเตม
  ค6ณลกษณะหร$อเมธอดในคลาสใหม=
การพฒนาคลาสขNMนใหม=ทช$Fอ GradStudent
                     .F                          สามารถท.จะเล$อกวธ.การได5
                                                         F
  สองแบบค$อ
   •   สร5างคลาสขNMนมาใหม=โดยไม=อ5างองกบคลาสเดมท.Fชอ Student
                                                   $F
   •   สร5างคลาสท.สบทอดมาจากคลาสเดมท.ช$Fอ Student
                   F $                   F
ตวอย+างโปรแกรมแสดงคลาสท.ช$Fอ Student
                          F
public class Student {
    private String id;
    private String name;
    private double gpa;
    public void setID(String ID) {
        id = ID;
    }
    public void setName(String n) {
        name = n;
    }
    public void setGPA(double GPA) {
        gpa = GPA;
    }
    public void showDetails() {
        System.out.println("ID: "+id);
        System.out.println("Name: "+name);
        System.out.println("GPA: "+gpa);
    }
}
ตวอย+างโปรแกรมท.ไม=ได5ใช5หลกการของการส$บทอด
                F
 public class GradStudent {
     private String id;
     private String name;
     private double gpa;
     private String thesisTitle;
     private String supervisor;
     public void setID(String ID) {
         id = ID;
     }
     public void setName(String n) {
         name = n;
     }
     public void setGPA(double GPA) {
         gpa = GPA;
     }
ตวอย+างโปรแกรมท.ไม=ได5ใช5หลกการของการส$บทอด
                F
     public void setThesisTitle(String t) {
             thesisTitle = t;
     }
     public void setSupervisor(String s) {
             supervisor = s;
     }
     public void showThesis() {
             System.out.println("ThesisTitle: "+thesisTitle);
             System.out.println("Supervisor: "+supervisor);
     }
}
ตวอย+างโปรแกรมท.ใช5หลกการของการส$บทอด
                    F
public class GradStudent extends Student {
    private String thesisTitle;
    private String supervisor;

    public void setThesisTitle(String t) {
       thesisTitle = t;
    }

    public void setSupervisor(String s) {
       supervisor = s;
    }

    public void showThesis() {
       System.out.println("ThesisTitle: "+thesisTitle);
       System.out.println("Supervisor: "+supervisor);
    }
}
รKปแสดงหลกการของการส$บทอด
ตวอย=างการส$บทอดท.ไม=ถKกต5อง
                              F
เราสามารถท.ตรวจสอบหลกการของการส$บทอดด5วยคDาว=า is a
            F

   public class Shirt {
        char size;
        float price;
   }

   public class Skirt extends Shirt {
        boolean long;
   }
ตวอย=างการส$บทอดท.Fถกต5อง
                             K
public class Clothing {
       char size;
       float price;
}

public class Shirt extends Clothing {
}

public class Skirt extends Clothing {
       boolean long;
}
ค.ยGเวรGด protected
ค6ณลกษณะหร$อเมธอดของ superclass ท.Fม. modifier เปLนแบบ private
  จะทDาให5 subclass ไม=สามารถท.Fจะเร.ยกใช5ได5
ภาษาจาวากDาหนดให5ม. access modifier ท.ช$Fอ protected ซNFงจะทDาให5
                                       F
  subclass สามารถเร.ยกใช5เมธอดหร$อค6ณลกษณะของ superclass ได5
ตวอย=างเช=น
           protected String name;
ค.ยGเวรGด protected
ภาษาจาวากDาหนดให5ม. access modifier ท.ช$Fอ protected ซNFงจะทDาให5คลาสท.F
                                       F
  เปLน subclass สามารถท.Fจะเร.ยกใช5เมธอดหร$อค6ณลกษณะของ superclass
  ได5 แม5ว=าจะอยKต=างคลาสหร$ออยKต=างแพคเกPจกนกPตาม
                 =              =
                                คลาสท.อยK=
                                       F    คลาสท.F
                      คลาส
        modifier                ในแพจเกPจ เปLนsubcla   คลาสใดๆ
                     เด.ยวกน
                                 เด.ยวกน      ss

                        √           √          √           √
         public

                        √           √          √
       protected

                        √           √
ตวอย=างโปรแกรมท.Fใช5คยเวรGด protected
                          . G
    public class Student {
     protected String id;
     protected String name;
     protected double gpa;
     public void setDetails(String ID,String n,double GPA) {
              id = ID;
              name = n;
              gpa = GPA;
     }
     public void showDetails() {
              System.out.println("ID: "+id);
              System.out.println("Name: "+name);
              System.out.println("GPA: "+gpa);
     }
}
คลาสท.Fช$Fอ Object
ภาษาจาวาได5กDาหนดให5คลาสใดๆ สามารถจะส$บทอดคลาสอ$Fนได5เพ.ยง
 คลาสเด.ยวเท=านMน
คลาสท6กคลาสในภาษาจาวาถ5าไม=ได5สบทอดจากคลาสใดเลยจะถ$อว=าคลาส
                                $
 นMนส$บทอดจากคลาสท.ช$Fอ Object
                   F
ตวอย=างเช=น
          public class Student extends Object {
           ...
         }

คลาสท.ช$Fอ Object จะม.เมธอดท.สDาคญค$อ
       F                      F
          public String toString()
   และ   public boolean equals(Object o)
ค.ยเวรGด super
                              G
   super เปLนค.ยGเวรGดท.ใช5ในการอ5างองถNง superclass เพ$อท.จะเร.ยกใช5
                         F                               F F
    เมธอดหร$อ constructor ของ superclass โดยม.รปแบบคDาสFงดงน.M
                                                 K
             super.methodName([arguments])

ตวอย=างเช=น คลาส GradStudent อาจม.เมธอดท.ช$Fอ showDetails()
                                          F
    โดยม.คDาสFงท.Fเร.ยกใช5เมธอด showDetails() ของคลาส Student และ
    showThesis() ของคลาส GradStudent
             public void showDetails() {
                super.showDetails();
                showThesis();
             }
ตวอย=างโปรแกรมท.Fใช5คยGเวรGด super
                             .
public class Student {
        private String id;
        private String name;
        private double gpa;
        public void showDetails() {
          System.out.println("ID: "+id);
          System.out.println("Name: "+name);
          System.out.println("GPA: "+gpa);
    }
}
ตวอย=างโปรแกรมท.Fใช5คยGเวรGด super
                           .

public class GradStudent extends Student {
     private String thesisTitle;
     private String supervisor;


      public void showDetails() {
          super.showDetails();
      System.out.println("Thesis Title: "+ thesisTitle);
          System.out.println("Supervisor: "+supervisor);
      }
}
การเข.ยนโปรแกรมโดยใช5หลกการของการม.ได5หลายรKปแบบ
การม.ได5หลายรKปแบบหมายถNง ค6ณสมบตของอPอบเจกตGของคลาสท.ต=างกน
                                                       F
  สามารถตอบสนองต=อเมธอดเด.ยวกนในวธ.การท.Fตางกนได5 ซNFงหมายถNงการ
                                            =
  เข.ยนเมธอดแบบ overridden และการใช5 Dynamic Binding
การเข.ยนเมธอดแบบ overridden ม.ข5อกDาหนดดงน.M
   •   จDานวนและชนดข5อมKลของ argument จะต5องเหม$อนเดม
   •   ชนดข5อมKลของค=าท.Fสงกลบจะต5องเหม$อนเดม
                          =
   •   access modifier จะต5องไม=ม.ระดบตFDากว=าเดมอาทเช=น ถ5าเมธอดเดมเปLน public
       จะไม=สามารถเปล.FยนเปLน private ได5
Dynamic Binding
ข5อด.ของการม.ได5หลายรKปแบบอ.กประการหนNง ค$อการท.FสามารถกDาหนดอP
                                       F
  อบเจกตGได5หลายรKปแบบ ตวอย=างเช=น จากรKปแบบ
           SuperClass obj;

เราสามารถท.จะสร5างอPอบเจกตGท.Fช$Fอ obj ซNFงอาจเปLนอPอบเจกตGของคลาสท.F
            F
  เปLน superclass หร$อท.เปLน subclass ได5 โดยใช5คDาสFงท.Fม.รKปแบบดงน.M
                        F
           obj = new SuperClass();
    หร$อ   obj = new SubClass();

ตวอย=างเช=น
           Student s;
           s = new GradStudent();
รKปแสดงการม.ได5หลายรKปแบบ
ตวอย=าง
    Student s1 = new Student();
    Student s1 = new GradStudent();
    Student s1 = new PhDStudent();
เมธอดแบบ Overloaded
ภาษาจาวาอน6ญาตให5คลาสใดๆม.เมธอดท.Fม.ช$Fอเด.ยวกนมากกว=าหนNงเมธอด
                                                          F
  ได5 แต=เมธอดเหล=านMนจะต5องม.จDานวนหร$อชนดข5อมKลของ argument ท.ต=าง
                                                                F
  กน
ตวอย=างต=อไปน.เปLนการเข.ยนเมธอดแบบ
               M                       overloaded ท.ถKกต5อง
                                                    F
      public void setDetails(String ID, String n) {
      }
      public void setDetails(String ID, double GPA) {
      }
      public double setDetails(double GPA, String n) {
      }

ตวอย=างต=อไปน.เปLนการเข.ยนเมธอดแบบ
               M                       overloaded ท.ไม=ถKกต5อง
                                                    F
      public void setDetails(String ID,double GPA) {
      }
      public void setDetails(String n,double GPA) {
      }
ตวอย+างโปรแกรมแสดงเมธอดแบบ overloaded
public class StudentV2 {
    private String id;
    private String name;
    private double gpa;
    public void setDetails(String ID,String n) {
       id = ID;
       name = n;
    }
    public void setDetails(String ID,String n,double GPA) {
       id = ID;
       name = n;
       gpa = GPA;
    }
}
เมธอดแบบ overridden
การกDาหนดเมธอดแบบ overridden เปLนหลกการท.Fสบเน$องมาจากหลกการ
                                            $ F
  ของการส$บทอด โดยคลาสท.FเปLน subclass สามารถท.จะเข.ยนเมธอดของ
                                                    F
  superclass ขNMนใหม=ได5 วธ.การน.เร.ยกว=า เมธอดใน subclass เปLนเมธอดแบบ
                                 M
  overridden
การเข.ยนเมธอดแบบ overridden          ม.ขอกDาหนดดงน.M
                                         5
   •   จDานวนและชนดข5อมKลของ argument จะต5องเหม$อนเดม
   •   ชนดข5อมKลของค=าท.Fสงกลบจะต5องเหม$อนเดม
                          =
   •   access modifier จะต5องไม=ม.ระดบตFDากว=าเดมอาทเช=น ถ5าเมธอดเดมเปLน public
       จะไม=สามารถเปล.FยนเปLน private ได5
ตวอย+างโปรแกรมแสดงเมธอดแบบ overridden
class Student {
    :
    public void showDetails() {
        System.out.println("ID: "+id);
        System.out.println("Name: "+name);
        System.out.println("GPA: "+gpa);
    }
}

public class GradStudentV2 extends Student {
    :
    public void showDetails() {
        super.showDetails();
        System.out.println("ThesisTitle: "+thesisTitle);
        System.out.println("Supervisor: "+supervisor);
    }
}
Virtual Method Invocation
โปรแกรมภาษาจาวาพจารณาเร.ยกใช5เมธอดจากชนดของอPอบเจกตGท.Fสร5าง
  ขNMน ตวอย=างเช=น คDาสFง
       Student s1 = new GradStudent();
       s1.showDetails();

เปLนคDาสFงท.Fเร.ยกใช5เมธอด showDetails() ของคลาส GradStudent ไม=ใช=
  เมธอดของคลาส Student
แต=คอมไพเลอรGของภาษาจาวาจะไม=อน6ญาตให5เร.ยกใช5เมธอดใดๆกPตามท.F
  ไม=ม.การประกาศอยKในเมธอดของ superclass ท.กDาหนดไว5 ตวอย=างเช=น
                   =                       F
       Student s1 = new GradStudent();
       s1.getSupervisor();           // Fail to compile
การส+งผ+าน argument ได5หลายรKปแบบ
ในกรณ.ท.Fเมธอดม. argument เปLนข5อมKลชนดคลาส เราสามารถท.Fจะส=ง     อP
    อบเจกตGของคลาสท.FเปLน subclass ของคลาสนMนแทนได5 ตวอย=างเช=น คDาสFง
            Student s1 = new Student();
            PhDStudent s2 = new GradStudent();

เราสามารถท.จะเร.ยกใช5เมธอด printInfo(Student s)ได5หลายรKปแบบ
            F
    ดงน.M
               printInfo(s1)
            printInfo(s2)
    หร$อ      printInfo(new FullTimeStudent())
ตวด'าเนนการ instanceof
คยเวรด instanceof เป%นตวด'าเนนการทใช$กบออบเจกตและคลาส เพ-อ
  ตรวจสอบว+าเป%นออบเจกตของคลาสนMนหร$อไม= โดยจะให$ผลลพธเป%นข$อม*ล
  ชนด boolean
ถ5าได5ผลลพธเป%น true แสดงว=าอPอบเจกตGเป%นของคลาสน0นหร-อเปLนของ
  คลาสทคลาสนMนส-บทอดมา
ตวอย+างเช+น
      GradStudent s1 = new GradStudent();
     (s1 instanceof GradStudent) → true
     (s1 instanceof Student)     → true
     (s1 instanceof Object)      → true
     (s1 instanceof String)      → Compilation fail!
ตวอย+างเมธอดท.แสดงการใช5 instanceof
              F
public void printInfo(Student s) {
    if (s instanceof PhDStudent) {
        System.out.println("PhD Student");
    } else if (s instanceof GradStudent) {
        System.out.println("Graduate Student");
    } else if (s instanceof FullTimeStudent) {
       System.out.println("Full-Time Student");
    } else if (s instanceof PartTimeStudent) {
        System.out.println("Part-Time Student");
    } else if (s instanceof Student) {
        System.out.println("Student");
    }
 }
การ Casting ออบเจกต
การ Casting ออบเจกตจะทDาให5ตวแปรของ subclass สามารถท.Fจะอ$างองถ4ง
  ออบเจกตของ subclass ผ=านตวแปรของ superclass ได5 อาทเช=น
      Student s1 = new GradStudent();
      GradStudent s2 = (GradStudent)s1;


ภาษาจาวาจะตรวจสอบชนดของออบเจกตในช+วงของการรนโปรแกรม ดงน0น
  ตวแปรของ subclass จะไม=สามารถอ$างองถ4งออบเจกตของ superclass ได5
  แม5ว=าจะทDาการ casting ออบเจกตแล5วกPตาม อาทเช=น
      Student s1 = new Student();
      GradStudent s2 = (GradStudent)s1;
      // คอมไพลGผ=านได5 แต=จะเกดข5อผดพลาดในช=วงของการรนโปรแกรม
การเรยกใช$เมธอดของออบเจกต
การเร.ยกใช5เมธอดของอPอบเจกตGท.FทDาการ casting ภาษาจาวาจะตรวจสอบ
  ชนดของอPอบเจกตGในช=วงของการรนโปรแกรม ว=าอPอบเจกตGดงกล=าวเปLน อP
  อบเจกตGของคลาสใด และคลาสนMนม.เมธอดท.Fเร.ยกใช5หร$อไม= หากไม=พบกPจะ
  เกดข5อผดพลาดในช=วงของการรนโปรแกรม ตวอย=างเช=น
   Student s1 = new Student();
      ((GradStudent) s1).getSupervisor();

   // คอมไพลGผ=านได5 แต=จะเกดข5อผดพลาดในช=วงของการรนโปรแกรม
ตวอย+างโปรแกรมแสดงการเร.ยกใช5เมธอด
public class Student {
   private String id;
   private String name;
   private double gpa;

    public String getID() {
       return id;
    }
    public String getName() {
       return name;
    }
    public double getGPA() {
       return gpa;
    }
}
ตวอย+างโปรแกรมแสดงการเร.ยกใช5เมธอด
public class GradStudent extends Student {
   private String thesisTitle;
   private String supervisor;
   public String getThesisTitle() {
      return thesisTitle;
   }
   public String getSupervisor() {
      return supervisor;
   }
}
ตวอย+างโปรแกรมแสดงการเร.ยกใช5เมธอด
public class TestCallingMethods {
   public static void main(String args[]) {
       Student s1 = new GradStudent();
       s1.getSupervisor();
       // compile error

        Student s2 = new Student();
        ((GradStudent) s2).getSupervisor();
        // runtime error
    }
}
Constructor
constructor เป%นเมธอดทมช-อเดยวกบช-อคลาส ซNงม.รปแบบดงน.M
                                           F K
       [modifier] ClassName([arguments]) {
           [statements]
       }
constructor เปLนเมธอดท.ไม=ม.ค=าท.จะส=งกลบแต=ไม=ตองระบ6ค.ยGเวรGด void
                        F         F              5
โดยทวไปคลาสทกคลาสจะม       default constructor ซNงม.รปแบบดงน.M
                                                  F K
      public ClassName() {
       }

เราสามารถทจะเขยน     constructor ในคลาสใดๆขNMนมากได$
default constructor จะหายไปเม-อมการเขยน   constructor ข40นใหม+
ตวอย+างโปรแกรมแสดงการเร.ยกใช5 constructor
public class Student {
    private String id;
    private String name;
    public Student(String ID,String n) {
        id = ID;
        name = n;
    }
}
public class TestConstructor {
    public static void main(String args[]) {
        Student s = new Student();      //illegal
        Student s = new Student("1122","Somchai");
    }
   }
ค'าสง     new()

มข0นตอนการท'างานดงน0
   •   ก'าหนดเน-0อทในหน+วยความจ'าให$กบออบเจกต
   •   ก'าหนดค+าเรมต$นให$กบคณลกษณะของออบเจกต
   •   กDาหนดค=าของค6ณลกษณะของอPอบเจกตGตามคDาสFงกDาหนดค=าท.Fประกาศไว5
   •   เรยกใช$ constructor
ตวอย=างเช=น
        public class MyDate {
            private int day = 1;
            private int month = 1;
            private int year = 2000;
            public MyDate(int d,int m,int y) {
               day = d;
               month = m;
               year = y;
            }
        }
รKปแสดงตวอย=างการทDางานขMนตอนคDาสFง new
คDาสFง
     MyDate d1 = new MyDate(16,8,1972);




          ขMนตอนท.หนNFง
                  F          ขMนตอนท.สอง
                                     F




          ขMนตอนท.สาม
                  F          ขMนตอนท.ส.F
                                     F
Constructor แบบ Overloaded
เราสามารถท.จะสร5าง constructor แบบ overloaded ของคลาสได$
            F
constructor แบบ overloaded จะมจ'านวนหร-อชนดข$อม*ลทแตกต+างกนของ
  arguments
ค'าสง new ท.ใช5ในการสร5างอPอบเจกตGจะเร.ยกใช5 constructor ท.ม. argument
             F                                              F
  ท.Fสงผ=านมาสอดคล5องกบ constructor ท.กDาหนด
      =                               F
ข5อด.ของการสร5าง constructor แบบ overloaded ค$อทDาให5เราสามารถท.F
  สร5างอPอบเจกตGเรFมต5นได5หลายรKปแบบ
เมธอดท.Fช$Fอ this() เปLนการเร.ยกใช5 constructor ของคลาสตวเอง โดยจะ
  ต5องเปLนคDาสFงแรกส6ดท.FอยK=ใน constructor แบบ overloaded
ตวอย+างโปรแกรมแสดง constructor แบบ overloaded
 public class Student {
     private String id;
     private String name;
     private double gpa;
     public Student(String ID,String n) {
         id = ID;
         name = n;
     }
     public Student(String ID,String n,double GPA) {
         id = ID;
         name = n;
         gpa = GPA;
     }
 }
เมธอด this()
เมธอดท.Fช$Fอ this() เปLนการเร.ยกใช5 constructor ของคลาสตวเอง โดยจะ
  ต5องเปLนคDาสFงแรกส6ดท.FอยK=ใน constructor แบบ overloaded
ตวอย+างโปรแกรมแสดงการใช5เมธอด this()
    public class Student {
       private String id;
       private String name;
       private double gpa;
       public Student(String ID,String n) {
           id = ID;
           name = n;
       }
       public Student(String ID,String n,double GPA) {
           this(ID,n);
           gpa = GPA;
       }
}
เมธอด super()
constructor ของ superclass จะไม+สบทอดมายง
                                  -             subclass
เราสามารถท.จะเร.ยกใช5 constructor ของ superclass ได5โดยใช5เมธอดท.Fช$Fอ
            F
  super() โดยส=งผ=าน argument ท.Fสอดคล5องกน
เมธอด super() จะต5องเปLนคDาสFงแรกของ constructor       เช=นเด.ยวกบ
  เมธอดท.Fช$Fอ this()
โดยทFวไปการทDางานของ constructor ของคลาสใดๆจะม.ผลทDาให5ม.การ
  เร.ยกใช5 constructor ของ superclass นMน ซNงถ5าไม=ม.คDาสFง super() อยKใน
                                            F                          =
  คDาสFงแรกของ constructor ของคลาสนMน ภาษาจาวาจะเร.ยกใช5 constructor
  แบบ default ของ superclass นMนโดยอตโนมต
ตวอย+างการเร.ยกใช5 constructor ของ superclass
public class StudentV1 {
    protected String name;
    public StudentV1(String n) {
        name = n;
    }
}

------------------------------------------------------
public class GradStudentV1 extends StudentV1 {
    public GradStudentV1(String n) {
        name = n;          /* compile error
                                  should be super(n) */
    }
}
ข0นตอนการท'างานของ constructor
•   ถ5าม.คDาสFง this() ใน constructor กPจะเร.ยกใช5 constructor แบบ
    overloaded ท.สอดคล5องกบคDาสFง this() แล5วข5ามไปขMนตอนท.F 3
                  F
•   เร.ยกใช5 constructor ของ superclass ถ5าไม=ม.คDาสFง super() จะเร.ยกใช5
    constructor แบบ default ยกเว5นคลาสท.Fช$Fอ Object จะไม=ม.การเร.ยกใช5
    constructor ของ superclass เน$Fองจากคลาสท.Fช$Fอ Object จะไม=ม.
    superclass
•   เร.ยกใช5คDาสFงกDาหนดค=าเรFมต5นของค6ณลกษณะของอPอบเจกตG
•   เร.ยกใช5คDาสFงภายใน constructor ของคลาสท.ใช5นน
                                             F M
ตวอย+างคลาสท.Fม. constructor ในรKปแบบต=างๆ
public class Student {
    protected String name;
    public Student(String n) {
       name = n;
    }
}
public class GradStudent extends Student {
    public GradStudent(String n) {
       super(n);
    }
    public GradStudent() {
       this(" ");
    }
}
เมธอดของคลาสท.ช$Fอ Object
                               F
คลาสท.ช$Fอ Object จะเปLนคลาสท.ท6กๆคลาสจะส$บทอดมา
       F                       F
เมธอดของคลาส Object ทส'าคญค-อ
   •   toString()
       เป%นเมธอดทใช$ในการแปลงค+าของออบเจกตให$เป%น String ซNFงจะส=งค=ากลบเปLน
       ข5อมKลชนดคลาส String
   •   equals(Object o)
       เปLนเมธอดท.Fใช5ในการเปร.ยบเท.ยบค=าของอPอบเจกตG ซNFงจะส=งค=ากลบเปLนข5อมKลชนด
       boolean
เมธอด     toString()

คลาสทต$องการจะแปลงข$อม*ลเป%น String จะต5องม.เมธอดแบบ overriden
 ท.Fช$Fอ toString()
เช=นคลาส Date ได5กDาหนดคDาสFงสDาหรบเมธอด toString() ไว5แล5ว ดง
 นMนการเร.ยกใช5เมธอด System.out.println()โดยท.F argument เปLนอP
 อบเจกตGของคลาส Date จะทDาให5ม.การเร.ยกใช5เมธอด toString() ของ
 คลาส Date โดยอตโนมต ตวอย=างเช=น คDาสFง
      Date d = new Date();
         System.out.println(d);
ตวอย+างโปรแกรมแสดงเมธอด toString()
public class Student {
    private String name;
    public Student(String n) {
       name = n;
    }
    public String toString() {
       return name;
    }
}
public class TestToString {
    public static void main(String args[]) {
       Student s1 = new Student("Thana");
       System.out.println(s1);
    }
}



             ผลลพธGท.Fได5จากการรนโปรแกรม   Thana
เมธอด equals()
คลาสทต$องการสร$างเมธอดเพ-อเปรยบเทยบค=าของอPอบเจกตGว+าเท+ากนหร-อ
  ไม+ จะต$องม.เมธอดแบบ overriden ท.ช$Fอ
                                   F      equals()
ตวอย+างโปรแกรมแสดงเมธอด equals()
class Student {
 private String name;
 public Student(String n) {
    name = n;
 }
 public boolean equals(Object obj) {
    if (obj.equals(name)) { return true;}
    else return false;
 }
}
public class TestEquals {
 public static void main(String args[]) {
    Student s1 = new Student("Thana");
    Student s2 = new Student("Thana");
    System.out.println(s1.equals(s2));
 }
}


        ผลลพธGท.Fได5จากการรนโปรแกรม    true
คลาสประเภท Wrapper
คลาสประเภท Wrapper จะช=วยในการสร5างอPอบเจกตGท.FเกPบชนดข5อมKลแบบ
  พ$นฐานไว5ในคอลเลPกชFนแบบ Heterogeneous
    M
คลาสประเภท Wrapper ม.ดงน.M
ตวอย=างโปรแกรมแสดงการใช5คลาสประเภท Wrapper
  public class ShowWrapper {
      public static void main(String args[]) {
          Boolean b = new Boolean(true);
          Character c = new Character('A');
          Double d = new Double(1.234);
          System.out.println(b);
          System.out.println(c);
          System.out.println(d);
      }
  }


                                              true
            ผลลพธGทได5จากการรนโปรแกรม
                   .F                         A
                                              1.234
Autoboxing และ Auto-unboxing
    คDาสFง Autoboxing ค$อการแปลงจากชนดข5อมKลพ$นฐานเช=น intไปเปLนคลาส
                                               M
    ประเภท Wrapper เช=น Integer
คDาสFง Auto-unboxing ค$อการแปลงจากคลาสประเภท Wrapper เช=น Byte
    ไปเปLนชนดข5อมKลพ$นฐานเช=น byte
                     M
ตวอย=างการใช5คDาสFง Auto-boxing/Auto-unboxing
 public class ShowWrapper {
     public static void main(String []args) {
          Integer myInt = 1; // int into Integer
          System.out.println(myInt);


          int i = myInt + 3; // mix Integer and int
          System.out.println(i);


      }
 }



            ผลลพธGทได5จากการรนโปรแกรม
                   .F                       1
                                            4
ค6ณลกษณะแบบ          static

คยเวรด static สามารถทจะใช$กบค6ณลกษณะและเมธอดของคลาสได$

ค6ณลกษณะของคลาสทเป%นแบบ static จะเป%นค6ณลกษณะททกออบ
              M
 เจกตของคลาสน.ใช$ร+วมกน
ค6ณลกษณะของคลาสทเป%นแบบ static สามารถถKกเรยกใช$จากช-อของ
 คลาสได$โดยไม+จ'าเป%นต$องสร$างออบเจกต อาทเช+น
   •   Student.counter
ตวอย+างโปรแกรมแสดงการใช5ค.ยเวรGด static
                           G
  public class Student {
    static int counter;
    public Student() {
       counter++;
    }
   }
   public class TestStatic {
    public static void main(String args[]) {
       Student s1 = new Student();
       Student s2 = new Student();
       System.out.println(Student.counter);
       System.out.println(s1.counter);
       System.out.println(s2.counter);
    }
   }

                                        2
                                        2
        ผลลพธGท.Fได5จากการรนโปรแกรม     2
เมธอดแบบ        static

เมธอดโดยทวไปจะม. modifier เป%นแบบ    non-static
เมธอดทม modifier เป%นแบบ static จะสามารถถKกเรยกใช$งาน โดยใช$ชอ
                                                              -
  คลาสได5เลยไม+จ'าเป%นต$องสร$างออปเจกของคลาสนMนข40นมาก+อน ซNFงม.รปแบบ
                                                                 K
  ดงน0
      className.methodName();
ตวอย+างเช+น เมธอดทกเมธอดในคลาส Math เป%นแบบ static ดงน0นการ
  เร.ยกใช5งานท6กเมธอดในคลาสสามารถทDาได5 เช=น
  Math.sqrt(4);

เมธอดแบบ static จะไม+สามารถเรยกใช$เมธอดหร-อตวแปรของอPอบเจกตG
  ได$โดยตรง
Static Initializer
Static Initializer
                ค-อบลอกในคลาสใดๆทอย*+นอกเมธอด และมคยเวรด
  static เพ-อนยามให$เป%นบลอกแบบ static
รKปแบบของ Static Initializer
      static {
         ...
      }

ค'าสงในบลอกแบบ static จะถ*กเรยกใช$เพยงคร0งเดยวเม-อ      JVM โหลด
  คลาสดงกล+าวข40นมา
Static Initializer ใช$ในการด.บก (debug) โปรแกรม หร-อใช5ในกรณ.ทต5องกา
                                                               .F
  รสร5างอPอบเจกตGของคลาสขNMนโดยอตโนมต
เราสามารถท.จะกDาหนดบลPอกแบบ static ได5มากกว=าหนNงบลPอก โดยการ
            F                                    F
  ทDางานจะถKกเร.ยงจากบนลงล=าง
ตวอย+างโปรแกรมแสดง Static Initializer
public class TestStaticBlock {
static int x=5;
static {
    x += 1;
}
public static void main(String args[]) {
    System.out.println("x = "+x);
}
static {
    x /= 2;
}
}



    ผลลพธGท.Fได5จากการรนโปรแกรม   x = 3
คยเวรด final
คยเวรด final สามารถจะใช$ได$กบคลาส ตวแปร       และเมธอด
คลาสทม    modifier เป%น final จะทDาให5คลาสอ$Fนไม+สามารถส-บทอดคลาสน.M
  ได$
เมธอดทม modifier เป%น final ค$อเมธอดท.Fจะไม=สามารถม.เมธอดแบบ
  overriden ได5
ตวแปรทม modifier เป%น final     ค-อค+าคงท ซNFงจะทDาให5สามารถกDาหนดค=า
  ได5เพ.ยงครMงเด.ยวเท=านMน
คลาสภายใน
คลาสภายใน (Inner class)  ค$อคลาสท.FประกาศอยK=ภายในคลาสอ$Fนๆ ซNFงบาง
  ครMงเร.ยกว=าคลาสแบบซ5อน (nested class)
คลาสภายในอน6ญาตให5ประกาศค6ณลกษณะหร$อเมธอดภายในคลาสอ$Fนได5

คลาสภายในม.ประโยชนGในกรณ.ท.Fตองการจะจดกล6=มของคลาสท.FตองทDางาน
                              5                        5
  ร=วมกน โดยต5องการควบค6มไม=ให5ม.การเข5าถNงโดยตรงจากคลาสอ$Fนๆ และ
  ต5องการเร.ยกใช5ค6ณลกษณะหร$อเมธอดของคลาสท.อยK=ภายนอกได5โดยตรง
                                               F
คลาสภายในทใช$ในภาษาจาวาแบ+งออกเป%น
   •   คลาสภายในทอย*+ภายในคลาสโดยตรง
   •   คลาสภายในทอย*+ภายในเมธอด
คลาสภายในท.อยKภายในคลาส
                             F =
กรณ.นเปLนการประกาศคลาสภายในคลาสอ$Fนท.Fเร.ยกว=า คลาสภายนอก
      .M
  (Outer class)
คลาสภายในสามารถม        access modifier เป%น public, private, default
  หร$อ   protected ได5
การสร5างอPอบเจกตGของคลาสภายในม.ขอแตกต=างดงน.M
                                 5
   •   การสร5างอPอบเจกตGของคลาสภายในนอกคลาสภายนอก จะต5องทDาการสร5างอPอบ
       เจกตGของคลาสภายนอกก=อน แล5วจNงสร5างอPอบเจกตGของคลาสภายในได5
   •   การสร5างอPอบเจกตGภายในเมธอดท.อยK=ในคลาสภายนอกสามารถทDาได5โดยตรง
                                    F
คลาสท.อยK=ภายในสามารถท.Fจะเร.ยกใช5ค6ณลกษณะและเมธอดของคลาส
       F
  ภายนอกได5
ตวอย+างโปรแกรมแสดงคลาสทอย*+ภายในคลาส
public class Outer {
   public void method1() {
       Inner in1 = new Inner();
       in1.method2();
   }
   public class Inner {
       public void method2() {
       System.out.println("Inner Demo");
       }
   }
}
public class InnerDemo {
   public static void main(String args[]) {
       Outer.Inner in2 = new Outer().new Inner();
       in2.method2();
   }
}
คลาสภายในท.อยK=ภายในเมธอด
                         F
คลาสภายในประเภทน.Mจะม. access modifier เปLน default

เราจะไม=สามารถท.Fจะสร5างอPอบเจกตGของคลาสภายในประเภทน.นอกเมธอด
                                                      M
  ท.Fประกาศคลาสได5
คลาสประเภทน.จะสามารถเร.ยกใช5ตวแปรภายในของเมธอดได5ในกรณ.ท.F
             M
  ตวแปรนMนประกาศเปLน final เท=านMน ส=วนตวแปรท.เปLนค6ณลกษณะของ
                                              F
  คลาสหร$อค6ณลกษณะของอPอบเจกตG สามารถท.จะเร.ยกใช5ได5เช=นเด.ยวกบ
                                         F
  คลาสภายในท.FอยK=ภายในคลาส
ค6ณสมบตท.FสDาคญอ$Fนๆของคลาสภายใน
คลาสภายในอาจเปLนคลาสแบบ abstract หร$ออนเตอรGเฟสได5

คลาสภายในท.FอยK=ภายในคลาสภายนอกโดยตรง ถ5าม. modifier เปLน static
  จะกลายเปLนคลาสปกต และสามารถสร5างอPอบเจกตGโดยการเร.ยกช$Fอของ
  คลาสภายนอกได5ดงน.M
      Outer.Inner in3 = Outer.new Inner();
คลาสภายในไม=สามารถท.Fประกาศให5ม.ค6ณลกษณะหร$อเมธอดเปLนแบบ
  static ได5เว5นแต=คลาสภายในจะเปLนคลาสแบบ static
คลาสภายในสามารถท.Fจะใช5ตวแปรท.FเปLนค6ณลกษณะของคลาสหร$อ
  ค6ณลกษณะของอPอบเจกตGของคลาสภายนอกได5
ตวอย+างโปรแกรมแสดงคลาสท.อยK=ภายในเมธอด
                        F
public class MOuter {
     private int a = 1;
     public void method(final int    b) {
      final int c = 2;
      int d = 3;
      class Inner {
       private void iMethod() {
           System.out.println("a =   "+a);
           System.out.println("b =   "+b);
           System.out.println("c =   "+c);
           System.out.println("d =   "+d);   //illegal
       }
      }
     }
}
Generic Types
เราสามารถท.จะประกาศคลาสหร$ออนเตอรGเฟสใดๆให5ม.ชนดข5อมKลเปLนแบบ
            F
  ทFวไป (Generic Type)
   public class ClassName(TypeVariable)
ตวอย=างเช=น
       –    public class Box<T>
จะระบ6ชนดข5อมKลแบบเจาะจงได5ตอนท.Fสร5างอPอบเจกตG

ตวอย=างเช=น
       –    Box<Integer> integerBox = new Box<Integer>();
ตวอย+างแสดงคลาสท.ใช5 Generic Type
                          F
    public class Box<T> {
       private T t;
       public void add(T t) {
           this.t = t;
       }
       public T get() {
           return t;
       }
}

-----------------------------------------------------------
public class BoxDemo {

      public static void main(String[] args) {
          Box<Integer> integerBox = new Box<Integer>();
          integerBox.add(new Integer(10));
          Integer someInteger = integerBox.get(); // no cast!
          System.out.println(someInteger);
      }
}
เมธอดแบบ Generic
เราสามารถท.จะใช5 Generic Type กบเมธอดหร$อ constructor ใดๆกPได5
            F
   [modifier] <TypeVariable> return_type
  methodName(TypeVaraible varName) {
                [method_body]
      }
โดยท.F
          –   TypeVariable ค$อช$Fอของตวแปรชนดข5อมKล
          –   varName ค$อช$Fอ argument
ตวอย+างแสดงคลาสท.ประกาศเมธอดแบบ Generic
                 F
public class BoxMethod {

    public <U> void inspect(U u) {
        System.out.println("U: " + u.getClass().getName());
    }
}
-------------------------------------------------------
public class BoxMethodDemo {
  public static void main(String[] args) {
        BoxMethod box = new BoxMethod();
        box.inspect(3.2);
    }
}
Annotation
   ภาษาจาวาม.คDาสFง annotation (เคร$Fองหมาย @) ซNFงจะให5ข5อมKลเก.Fยวกบโปรแกรม โดยท.Fจะ
    ไม=ม.ผลโดยตรงต=อคDาสFงใดๆ
   annotation จะถKกใช5งานในกรณ.ต=างๆ ดงน.M

          –     เปLนข5อมKลสDาหรบคอมไพเลอรG เพ$Fอตรวจจบข5อผดพลาดหร$อ warning ของโปรแกรม
          –     ช=วยในกระบวนการขMนตอนการคอมไพลGและตดตMง (deployment) ทMงน.MซอฟตGแวรGในการ
                คอมไพลG สามารถท.จะประมวลผลข5อมKล annotation ในการสร5างโค5ดท.FเปLนไฟลG XML ได5
                                 F
          –     ช=วยในกระบวนการขMนตอน runtime ทMงน.Mจาก annotation บางคDาสFงจะสามารถตว
                รสอบได5ในช=วง runtime
Annotation
   คDาสFง annotation @ มกจะถKกประกาศเปLนคDาสFงแรก ตามด5วยช$Fอของ annotation ซNFง
    อาจม. element ท.Fม. named หร$อ unnamed valued
   ตวอย=างเช=น
                       @Author(
                             name = "Benjamin Franklin",
                             date = "3/27/2003"
                       )
                       class MyClass() { }
      หร$อ
                       @SuppressWarnings(value = "unchecked")
                       void myMethod() { }
Annotation Document
@interface ClassPreamble {
   String author();
   String date();
   int currentRevision() default 1;
   String lastModified() default "N/A";
   String lastModifiedBy() default "N/A";
   String[] reviewers(); // Note use of array
}

@ClassPreamble (
   author = "John Doe",
   date = "3/17/2002",
   currentRevision = 6,
   lastModified = "4/12/2004",
   lastModifiedBy = "Jane Doe",
   reviewers = {"Alice", "Bob", "Cindy"} // Note array notation
)
public class Generation3List extends Generation2List {
// class code goes here

}
Annotation ท.Fใช5โดยคอมไพเลอรG
   ภาษาจาวาได5กDาหนด annotation สDาหรบคอมไพเลอรGไว5สามคDาสFงค$อ @Depreacted,
    @Override และ @Suppresswarnings
   @Deprecated เราจะใช5 annotationน.M ในกรณ.ท.Fต5องการระบ6ว=าคDาสFงเช=นคลาส เมธอด
    หร$อค6ณลกษณะใด เปLนคDาสFงท.Fไม=ควรจะใช5แล5ว เพ$Fอให5คอมไพเลอรGส=งคDาสFง warning ออกมาในช=วง
    การคอมไพลG
   @Override เราจะใช5 annotationน.Mเพ$FอจะบอกคอมไพเลอรGว=า element น.M
    override คDาสFง element ของ superclass
   @SuppressWarnings เราจะใช5 annotationน.Mเพ$FอบอกคอมไพเลอรGไม=ตองแสดงคDาสFง
                                                                            5
    warning ท.Fอาจ ปรากฎขNนจากการใช5คDาสFงท.Fตามมาน.ในช=วงการคอมไพลGโปรแกรม
                          M                         M
สร6ปเน$อหาของบท
                             M
เมธอดท.FกDาหนดขNนในคลาสใดๆสามารถเร.ยกใช5งานได5สองรKปแบบค$อ การ
                 M
  เร.ยกใช5งานจากคลาสท.Fตางกน และการเร.ยกใช5งานภายในคลาสเด.ยวกน
                        =
เมธอดท.FกDาหนดขNนในคลาสอาจม. argument ท.Fรบค=าเพ$FอนDาไปใช5ในเมธอด
                 M
เมธอดใดๆของคลาสสามารถท.Fจะม.ค=าท.Fสงกลบมาได5 ทMงน.การประกาศ
                                    =              M
  เมธอดจะต5องระบ6ชนดข5อมKลของค=าท.Fจะส=งกลบ
เมธอดสามารถแบ=งเปLนเมธอดของอPอบเจกตG (หร$อเร.ยกว=าเมธอดแบบ non-
  static) และเมธอดของคลาส (หร$อเร.ยกว=าเมธอดแบบ static)
เมธอดของคลาสใดท.Fม. modifier เปLนแบบ static จะทDาให5สามารถถKก
  เร.ยกใช5งาน โดยใช5ช$FอของคลาสนMนได5เลย
เมธอดแบบ overloaded ค$อ ม.เมธอดท.ม.ช$Fอเด.ยวกนแต=จะม.จDานวนหร$อชนด
                                  F
  ข5อมKลของ argument ท.Fต=างกน
สร6ปเน$อหาของบท
                                   M
โดยทFวไป ค6ณลกษณะของคลาสจะม. modifier เปLนแบบ private ทMงน.เพ$อ
                                                            M F
    ปoองกนการเข5าถNงจากคลาสอ$Fน
โดยทFวไป เมธอดของคลาสจะม. modifier เปLนแบบ public ทMงน.เพ$อให5
                                                        M F
    เมธอดจากคลาสอ$Fนเร.ยกใช5ได5
ช$Fอของเมธอดท.Fเก.Fยวข5องกบค6ณลกษณะของคลาส นยมใช5 setXxx สDาหรบ
    เมธอดท.Fม.ไว5เพ$FอกDาหนดค=าให5กบค6ณลกษณะ xxx และใช5 getXxx สDาหรบ
    เมธอดท.Fจะส=งค=ากลบเปLนค6ณลกษณะ xxx
   ค.ยGเวรGด protected จะทDาให5คลาสท.FเปLน subclass สามารถท.Fจะอ5างองถNงค6ณลกษณะหร$อ
    เมธอดของ superclass ได5
สร6ปเน$อหาของบท
                                M
คลาสท6กคลาสในภาษาจาวาถ5าไม=ได5สบทอดจากคลาสใดเลยจะถ$อว=าคลาส
                                $
    นMนส$บทอดจากคลาสท.ช$Fอ Object
                      F
เมธอดแบบ overriden จะเปLนการเข.ยนเมธอดของ superclass ขNMนใหม=

   super เปLนค.ยเวรGดท.Fใช5ในการอ5างองถNง superclass
                 G
การม.ได5หลายรKปแบบหมายถNง
         –    การท.เราสามารถท.จะสร5างหร$ออ5างถNงอPอบเจกตGของคลาสท.ส$บทอดกนได5
                   F          F                                   F
              หลายรKปแบบ
         –    การท.เราสามารถท.จะอ5างถNงเมธอดช$Fอเด.ยวกนได5หลายรKปแบบ
                     F          F
เมธอดแบบ overloaded หมายถNงเมธอดท.ม.ช$Fอเด.ยวกนมากกว=าหนNงเมธอด
                                   F                      F
    โดยม.จDานวนหร$อชนดของ argument ท.Fแตกต=างกน
สร6ปเน$อหาของบท
                             M
เมธอดแบบ overridden หมายถNงการท.F subclass สร5างเมธอดท.ม.อยKแล5วใน
                                                        F =
  superclass ขNMนใหม= โดยใช5ช$Fอ argument และชนดข5อมKลของค=าท.ส=งกลบ
                                                              F
  ของเมธอดเหม$อนเดม
ค.ยGเวรGด instanceof เปLนตวดDาเนนการท.Fใช5กบอPอบเจกตGและคลาส เพ$อตรวจ
                                                                 F
  สอบว=าอPอบเจกตGใดๆ เปLน อPอบเจกตGของคลาสท.ระบ6หร$อไม=
                                            F
การ casting อPอบเจกตG ทDาให5เราสามารถจะกDาหนดอPอบเจกตGของคลาสท.F
  เปLน superclass ให5กบตวแปรท.FกDาหนดเปLนคลาสท.FเปLน subclass ได5
Constructor หมายถNง เมธอดท.ม.ช$Fอเด.ยวกนกบช$Fอคลาส แต=จะไม=ม.การส=ง
                            F
  ค=ากลบและจะไม=ม.การใส=ค.ยเวรGด void โดยคลาสท6กคลาสจะม. default
                             G
  constructor มาให5อยK=แล5ว แต=เราสามารถท.FจะกDาหนด constructor ขNMนใหม=
  เองได5
สร6ปเน$อหาของบท
                              M
Constructor แบบ overloaded หมายถNง constructor ท.Fม.จDานวนหร$อชนด
  ของ argument ท.Fแตกต=างกน
เมธอดท.Fช$Fอ this() เปLนการเร.ยกใช5 constructor ของคลาสตวเอง

Constructor แบบ default ของคลาสท.FเปLน superclass จะถKกเร.ยกใช5โดย
  อตโนมตท6กครMงท.ม.การสร5าง อPอบเจกตGของคลาส
                 F
คลาสท.ช$Fอ Object ม.เมธอดท.FสDาคญอยKสองเมธอดค$อเมธอด toString() และ
       F                             =
  เมธอด equals()
Auto-boxing / Auto-unboxing ค$อการแปลงค=าระหว=างชนกข5อมKลพ$นฐาน
                                                            M
  กบคลาสประเภท Wrapper ท.Fสอดคล5องกนโดยอตโนมต
เมธอดแบบ static สามารถถKกเร.ยกใช5จากช$Fอของคลาสได5โดยไม=จDาเปLน
  ต5องสร5างอPอบเจกตG
สร6ปเน$อหาของบท
                            M
คลาสแบบ final ค$อคลาสท.ไม=สามารถส$บทอดได5
                        F
คลาสภายในหมายถNงคลาสท.อยK=ภายในคลาส หร$อคลาสท.FอยKภายในเมธอด
                       F                           =
Generic Type สามารถท.จะทDาให5เราประกาศคลาสหร$ออนเตอรGเฟสใดๆให5ม.
                      F
  ชนดข5อมKลเปLนแบบทFวไป (Generic Type) แล5วค=อยระบ6ชนดข5อมKลแบบ
  เจาะจงตอนท.สร5างอPอบเจกตGได5
              F
เมธอดแบบ Generic ค$ดเมธอดท.Fม. argument ท.เปLน Generic Type
                                           F
Annotation จะให5ข5อมKลเก.Fยวกบโปรแกรม โดยท.Fจะไม=ม.ผลโดยตรงต=อคDาสFง
  ใดๆของ code ท.ทDาการบนทNก
                F

Mais conteúdo relacionado

Mais procurados

Java Programming [12/12] : Thread
Java Programming [12/12] : ThreadJava Programming [12/12] : Thread
Java Programming [12/12] : ThreadIMC Institute
 
Java Programming [8/12] : Arrays and Collection
Java Programming [8/12] : Arrays and CollectionJava Programming [8/12] : Arrays and Collection
Java Programming [8/12] : Arrays and CollectionIMC Institute
 
พื้นฐานโปรแกรมภาษาจาวา
พื้นฐานโปรแกรมภาษาจาวาพื้นฐานโปรแกรมภาษาจาวา
พื้นฐานโปรแกรมภาษาจาวาThanachart Numnonda
 
Java Programming: การจัดการกับข้อผิดพลาด
Java Programming: การจัดการกับข้อผิดพลาดJava Programming: การจัดการกับข้อผิดพลาด
Java Programming: การจัดการกับข้อผิดพลาดThanachart Numnonda
 
Reference :: Java :: เต็ม
 Reference :: Java :: เต็ม Reference :: Java :: เต็ม
Reference :: Java :: เต็มJitti Nut
 
การเขียนฟังก์ชั่นในภาษา C
การเขียนฟังก์ชั่นในภาษา Cการเขียนฟังก์ชั่นในภาษา C
การเขียนฟังก์ชั่นในภาษา CWarawut
 
คลาสและการเขียนโปรแกรมเชิงวัตถุเบื้องต้น
คลาสและการเขียนโปรแกรมเชิงวัตถุเบื้องต้นคลาสและการเขียนโปรแกรมเชิงวัตถุเบื้องต้น
คลาสและการเขียนโปรแกรมเชิงวัตถุเบื้องต้นPp'dan Phuengkun
 
พื้นฐานภาษาจาวา
พื้นฐานภาษาจาวาพื้นฐานภาษาจาวา
พื้นฐานภาษาจาวาT'tle Tanwarat
 
พื้นฐานภาษาจาวา
พื้นฐานภาษาจาวาพื้นฐานภาษาจาวา
พื้นฐานภาษาจาวาJK133
 
2.Java fundamentals
2.Java fundamentals2.Java fundamentals
2.Java fundamentalsUsableLabs
 
6.Flow control
6.Flow control6.Flow control
6.Flow controlUsableLabs
 
บทที่ 5 คลาส
บทที่ 5 คลาสบทที่ 5 คลาส
บทที่ 5 คลาสTheeravaj Tum
 
การเขียนคำสั่งควบคุมขั้นพื้นฐาน
การเขียนคำสั่งควบคุมขั้นพื้นฐานการเขียนคำสั่งควบคุมขั้นพื้นฐาน
การเขียนคำสั่งควบคุมขั้นพื้นฐานNookky Anapat
 
เครื่องหมายและการดำเนินการในภาษาซี
เครื่องหมายและการดำเนินการในภาษาซีเครื่องหมายและการดำเนินการในภาษาซี
เครื่องหมายและการดำเนินการในภาษาซีเทวัญ ภูพานทอง
 
Java-Answer Chapter 05-06 (For Print)
Java-Answer Chapter 05-06 (For Print)Java-Answer Chapter 05-06 (For Print)
Java-Answer Chapter 05-06 (For Print)Wongyos Keardsri
 

Mais procurados (20)

Java Programming [12/12] : Thread
Java Programming [12/12] : ThreadJava Programming [12/12] : Thread
Java Programming [12/12] : Thread
 
Java Programming [8/12] : Arrays and Collection
Java Programming [8/12] : Arrays and CollectionJava Programming [8/12] : Arrays and Collection
Java Programming [8/12] : Arrays and Collection
 
พื้นฐานโปรแกรมภาษาจาวา
พื้นฐานโปรแกรมภาษาจาวาพื้นฐานโปรแกรมภาษาจาวา
พื้นฐานโปรแกรมภาษาจาวา
 
Java Programming: การจัดการกับข้อผิดพลาด
Java Programming: การจัดการกับข้อผิดพลาดJava Programming: การจัดการกับข้อผิดพลาด
Java Programming: การจัดการกับข้อผิดพลาด
 
Reference :: Java :: เต็ม
 Reference :: Java :: เต็ม Reference :: Java :: เต็ม
Reference :: Java :: เต็ม
 
ภาษา C#
ภาษา C#ภาษา C#
ภาษา C#
 
การเขียนฟังก์ชั่นในภาษา C
การเขียนฟังก์ชั่นในภาษา Cการเขียนฟังก์ชั่นในภาษา C
การเขียนฟังก์ชั่นในภาษา C
 
C language
C languageC language
C language
 
คลาสและการเขียนโปรแกรมเชิงวัตถุเบื้องต้น
คลาสและการเขียนโปรแกรมเชิงวัตถุเบื้องต้นคลาสและการเขียนโปรแกรมเชิงวัตถุเบื้องต้น
คลาสและการเขียนโปรแกรมเชิงวัตถุเบื้องต้น
 
พื้นฐานภาษาจาวา
พื้นฐานภาษาจาวาพื้นฐานภาษาจาวา
พื้นฐานภาษาจาวา
 
พื้นฐานภาษาจาวา
พื้นฐานภาษาจาวาพื้นฐานภาษาจาวา
พื้นฐานภาษาจาวา
 
2.Java fundamentals
2.Java fundamentals2.Java fundamentals
2.Java fundamentals
 
C slide
C slideC slide
C slide
 
6.Flow control
6.Flow control6.Flow control
6.Flow control
 
บทที่ 5 คลาส
บทที่ 5 คลาสบทที่ 5 คลาส
บทที่ 5 คลาส
 
การเขียนคำสั่งควบคุมขั้นพื้นฐาน
การเขียนคำสั่งควบคุมขั้นพื้นฐานการเขียนคำสั่งควบคุมขั้นพื้นฐาน
การเขียนคำสั่งควบคุมขั้นพื้นฐาน
 
เครื่องหมายและการดำเนินการในภาษาซี
เครื่องหมายและการดำเนินการในภาษาซีเครื่องหมายและการดำเนินการในภาษาซี
เครื่องหมายและการดำเนินการในภาษาซี
 
Java-Answer Chapter 05-06 (For Print)
Java-Answer Chapter 05-06 (For Print)Java-Answer Chapter 05-06 (For Print)
Java-Answer Chapter 05-06 (For Print)
 
Intro c
Intro cIntro c
Intro c
 
02 basic
02 basic02 basic
02 basic
 

Destaque

C++: inheritance, composition, polymorphism
C++: inheritance, composition, polymorphismC++: inheritance, composition, polymorphism
C++: inheritance, composition, polymorphismJussi Pohjolainen
 
บทที่ 3 พื้นฐานภาษา Java
บทที่ 3 พื้นฐานภาษา Javaบทที่ 3 พื้นฐานภาษา Java
บทที่ 3 พื้นฐานภาษา JavaItslvle Parin
 
คลาสและการเขียนโปรแกรมเชิงวัตถุเบื้องต้น
คลาสและการเขียนโปรแกรมเชิงวัตถุเบื้องต้นคลาสและการเขียนโปรแกรมเชิงวัตถุเบื้องต้น
คลาสและการเขียนโปรแกรมเชิงวัตถุเบื้องต้นSirinat Sansom
 
Java Programming [1/12] : Introduction
Java Programming [1/12] : IntroductionJava Programming [1/12] : Introduction
Java Programming [1/12] : IntroductionIMC Institute
 
Java Programming: การจัดการกับเหตุการณ์กราฟิก
Java Programming: การจัดการกับเหตุการณ์กราฟิกJava Programming: การจัดการกับเหตุการณ์กราฟิก
Java Programming: การจัดการกับเหตุการณ์กราฟิกThanachart Numnonda
 
เมธอด กลุ่ม3
เมธอด กลุ่ม3 เมธอด กลุ่ม3
เมธอด กลุ่ม3 Piyada Petchalee
 
บทที่ 6 คลาสและการเขียนโปรแกรม
บทที่ 6 คลาสและการเขียนโปรแกรมบทที่ 6 คลาสและการเขียนโปรแกรม
บทที่ 6 คลาสและการเขียนโปรแกรมNookky Anapat
 
บทที่2
บทที่2บทที่2
บทที่2tyt13
 
พื้นฐานภาษาจาวา
พื้นฐานภาษาจาวาพื้นฐานภาษาจาวา
พื้นฐานภาษาจาวาSarocha Makranit
 
พื้นฐานภาษาจาวา
พื้นฐานภาษาจาวาพื้นฐานภาษาจาวา
พื้นฐานภาษาจาวาPrawwe Papasson
 
โครงงานคอมพิวเตอร์
โครงงานคอมพิวเตอร์โครงงานคอมพิวเตอร์
โครงงานคอมพิวเตอร์Thanyalux Kanthong
 
พื้นฐานภาษาจาวา
พื้นฐานภาษาจาวาพื้นฐานภาษาจาวา
พื้นฐานภาษาจาวาAeew Autaporn
 
Basic java need to know for newbie android developer
Basic java need to know for newbie android developerBasic java need to know for newbie android developer
Basic java need to know for newbie android developerAppcodev
 

Destaque (18)

C++: inheritance, composition, polymorphism
C++: inheritance, composition, polymorphismC++: inheritance, composition, polymorphism
C++: inheritance, composition, polymorphism
 
Java2
Java2Java2
Java2
 
บทที่ 3 พื้นฐานภาษา Java
บทที่ 3 พื้นฐานภาษา Javaบทที่ 3 พื้นฐานภาษา Java
บทที่ 3 พื้นฐานภาษา Java
 
คลาสและการเขียนโปรแกรมเชิงวัตถุเบื้องต้น
คลาสและการเขียนโปรแกรมเชิงวัตถุเบื้องต้นคลาสและการเขียนโปรแกรมเชิงวัตถุเบื้องต้น
คลาสและการเขียนโปรแกรมเชิงวัตถุเบื้องต้น
 
4.Oop
4.Oop4.Oop
4.Oop
 
Java Programming [1/12] : Introduction
Java Programming [1/12] : IntroductionJava Programming [1/12] : Introduction
Java Programming [1/12] : Introduction
 
Java Programming: การจัดการกับเหตุการณ์กราฟิก
Java Programming: การจัดการกับเหตุการณ์กราฟิกJava Programming: การจัดการกับเหตุการณ์กราฟิก
Java Programming: การจัดการกับเหตุการณ์กราฟิก
 
เมธอด กลุ่ม3
เมธอด กลุ่ม3 เมธอด กลุ่ม3
เมธอด กลุ่ม3
 
บทที่ 6 คลาสและการเขียนโปรแกรม
บทที่ 6 คลาสและการเขียนโปรแกรมบทที่ 6 คลาสและการเขียนโปรแกรม
บทที่ 6 คลาสและการเขียนโปรแกรม
 
เมธอด
เมธอดเมธอด
เมธอด
 
บทที่2
บทที่2บทที่2
บทที่2
 
การเขียนโปรแกรมภาษา
การเขียนโปรแกรมภาษาการเขียนโปรแกรมภาษา
การเขียนโปรแกรมภาษา
 
บทที่ 2 เตรียมตัวให้พร้อมก่อนเขียนโปรแกรม java
บทที่ 2 เตรียมตัวให้พร้อมก่อนเขียนโปรแกรม javaบทที่ 2 เตรียมตัวให้พร้อมก่อนเขียนโปรแกรม java
บทที่ 2 เตรียมตัวให้พร้อมก่อนเขียนโปรแกรม java
 
พื้นฐานภาษาจาวา
พื้นฐานภาษาจาวาพื้นฐานภาษาจาวา
พื้นฐานภาษาจาวา
 
พื้นฐานภาษาจาวา
พื้นฐานภาษาจาวาพื้นฐานภาษาจาวา
พื้นฐานภาษาจาวา
 
โครงงานคอมพิวเตอร์
โครงงานคอมพิวเตอร์โครงงานคอมพิวเตอร์
โครงงานคอมพิวเตอร์
 
พื้นฐานภาษาจาวา
พื้นฐานภาษาจาวาพื้นฐานภาษาจาวา
พื้นฐานภาษาจาวา
 
Basic java need to know for newbie android developer
Basic java need to know for newbie android developerBasic java need to know for newbie android developer
Basic java need to know for newbie android developer
 

Semelhante a Java Programming: การเขียนโปรแกรมภาษาจาวาเชิงอ็อบเจกต์

Semelhante a Java Programming: การเขียนโปรแกรมภาษาจาวาเชิงอ็อบเจกต์ (20)

Java Programming [6/12] : Object Oriented Java Programming
Java Programming [6/12] : Object Oriented Java ProgrammingJava Programming [6/12] : Object Oriented Java Programming
Java Programming [6/12] : Object Oriented Java Programming
 
C lang
C langC lang
C lang
 
C language
C languageC language
C language
 
Lab Computer Programming 1
Lab Computer Programming 1Lab Computer Programming 1
Lab Computer Programming 1
 
Ass1 1
Ass1 1Ass1 1
Ass1 1
 
Computer Programming 2.2
Computer Programming 2.2Computer Programming 2.2
Computer Programming 2.2
 
Tec4
Tec4Tec4
Tec4
 
C Programming
C ProgrammingC Programming
C Programming
 
Computer Programming 3
Computer Programming 3 Computer Programming 3
Computer Programming 3
 
บทที่ 6 อาร์เรย์
บทที่ 6 อาร์เรย์บทที่ 6 อาร์เรย์
บทที่ 6 อาร์เรย์
 
Computer programming
Computer  programmingComputer  programming
Computer programming
 
Computer programming
Computer programmingComputer programming
Computer programming
 
Java-Answer Chapter 05-06
Java-Answer Chapter 05-06Java-Answer Chapter 05-06
Java-Answer Chapter 05-06
 
นางสาว จรัญญา-กฤตย์ณัชช์-59170236-กลุ่ม-1
นางสาว จรัญญา-กฤตย์ณัชช์-59170236-กลุ่ม-1นางสาว จรัญญา-กฤตย์ณัชช์-59170236-กลุ่ม-1
นางสาว จรัญญา-กฤตย์ณัชช์-59170236-กลุ่ม-1
 
Chapter3
Chapter3Chapter3
Chapter3
 
66
6666
66
 
Java-Answer Chapter 12-13
Java-Answer Chapter 12-13Java-Answer Chapter 12-13
Java-Answer Chapter 12-13
 
001-โปรแกรมภาษาซี
001-โปรแกรมภาษาซี001-โปรแกรมภาษาซี
001-โปรแกรมภาษาซี
 
Power point
Power pointPower point
Power point
 
3.8 การทำงานแบบลำดับ
3.8 การทำงานแบบลำดับ3.8 การทำงานแบบลำดับ
3.8 การทำงานแบบลำดับ
 

Mais de Thanachart Numnonda

Thailand Digital Industry Survey Result 2021
Thailand Digital Industry Survey Result 2021Thailand Digital Industry Survey Result 2021
Thailand Digital Industry Survey Result 2021Thanachart Numnonda
 
ประวัติ (ศาสตร์) อันแสนสุขของ แถมสุข
ประวัติ (ศาสตร์) อันแสนสุขของ แถมสุขประวัติ (ศาสตร์) อันแสนสุขของ แถมสุข
ประวัติ (ศาสตร์) อันแสนสุขของ แถมสุขThanachart Numnonda
 
ข้อบังคับ สมาคมสถาปนิกเทคโนโลยีสารสนเทศประเทศไทย
ข้อบังคับ สมาคมสถาปนิกเทคโนโลยีสารสนเทศประเทศไทยข้อบังคับ สมาคมสถาปนิกเทคโนโลยีสารสนเทศประเทศไทย
ข้อบังคับ สมาคมสถาปนิกเทคโนโลยีสารสนเทศประเทศไทยThanachart Numnonda
 
Software Trends Towards AEC 2015
Software Trends Towards AEC 2015Software Trends Towards AEC 2015
Software Trends Towards AEC 2015Thanachart Numnonda
 
How would cloud computing Effect to Software Industry?
How would cloud computing  Effect to Software Industry?How would cloud computing  Effect to Software Industry?
How would cloud computing Effect to Software Industry?Thanachart Numnonda
 
Impact of cloud computing to Asian IT Industry
Impact of cloud computing  to Asian IT IndustryImpact of cloud computing  to Asian IT Industry
Impact of cloud computing to Asian IT IndustryThanachart Numnonda
 
พิชิตคู่แข่ง แซงหน้าด้วยไอที ยุคใหม่
พิชิตคู่แข่ง แซงหน้าด้วยไอที ยุคใหม่พิชิตคู่แข่ง แซงหน้าด้วยไอที ยุคใหม่
พิชิตคู่แข่ง แซงหน้าด้วยไอที ยุคใหม่Thanachart Numnonda
 
รายชื่อผู้สมควรได้รับใบประกาศเกียรติคุณโครงการวิทยาศาสตร์สู่ความเป็นเลิศ]
รายชื่อผู้สมควรได้รับใบประกาศเกียรติคุณโครงการวิทยาศาสตร์สู่ความเป็นเลิศ]รายชื่อผู้สมควรได้รับใบประกาศเกียรติคุณโครงการวิทยาศาสตร์สู่ความเป็นเลิศ]
รายชื่อผู้สมควรได้รับใบประกาศเกียรติคุณโครงการวิทยาศาสตร์สู่ความเป็นเลิศ]Thanachart Numnonda
 
พิชิตคู่แข่ง แซงหน้าด้วยไอที ยุคใหม่
พิชิตคู่แข่ง แซงหน้าด้วยไอที ยุคใหม่พิชิตคู่แข่ง แซงหน้าด้วยไอที ยุคใหม่
พิชิตคู่แข่ง แซงหน้าด้วยไอที ยุคใหม่Thanachart Numnonda
 
ไอซีทีกับการเปลี่ยนแปลงของสังคมไทย
ไอซีทีกับการเปลี่ยนแปลงของสังคมไทย ไอซีทีกับการเปลี่ยนแปลงของสังคมไทย
ไอซีทีกับการเปลี่ยนแปลงของสังคมไทย Thanachart Numnonda
 
Cloud Computing กับการใช้งานในองค์กรต่างๆ
Cloud Computing กับการใช้งานในองค์กรต่างๆCloud Computing กับการใช้งานในองค์กรต่างๆ
Cloud Computing กับการใช้งานในองค์กรต่างๆThanachart Numnonda
 
3G กับอนาคต ธุรกิจแอพพลิเคชันในเมืองไทย
3G กับอนาคต ธุรกิจแอพพลิเคชันในเมืองไทย3G กับอนาคต ธุรกิจแอพพลิเคชันในเมืองไทย
3G กับอนาคต ธุรกิจแอพพลิเคชันในเมืองไทยThanachart Numnonda
 
บทความ Google vs. Android
บทความ Google vs. Android  บทความ Google vs. Android
บทความ Google vs. Android Thanachart Numnonda
 
Technology Trends & The Impact for Software Industry
Technology Trends & The Impact for Software IndustryTechnology Trends & The Impact for Software Industry
Technology Trends & The Impact for Software IndustryThanachart Numnonda
 
อยากอยู่ 110 ปี
อยากอยู่ 110 ปี อยากอยู่ 110 ปี
อยากอยู่ 110 ปี Thanachart Numnonda
 
Intermediate Java Programming Language (in Thai)
Intermediate Java Programming Language (in Thai)Intermediate Java Programming Language (in Thai)
Intermediate Java Programming Language (in Thai)Thanachart Numnonda
 

Mais de Thanachart Numnonda (20)

Thailand Digital Industry Survey Result 2021
Thailand Digital Industry Survey Result 2021Thailand Digital Industry Survey Result 2021
Thailand Digital Industry Survey Result 2021
 
ประวัติ (ศาสตร์) อันแสนสุขของ แถมสุข
ประวัติ (ศาสตร์) อันแสนสุขของ แถมสุขประวัติ (ศาสตร์) อันแสนสุขของ แถมสุข
ประวัติ (ศาสตร์) อันแสนสุขของ แถมสุข
 
Planning on Mobile Strategy
Planning on Mobile StrategyPlanning on Mobile Strategy
Planning on Mobile Strategy
 
ข้อบังคับ สมาคมสถาปนิกเทคโนโลยีสารสนเทศประเทศไทย
ข้อบังคับ สมาคมสถาปนิกเทคโนโลยีสารสนเทศประเทศไทยข้อบังคับ สมาคมสถาปนิกเทคโนโลยีสารสนเทศประเทศไทย
ข้อบังคับ สมาคมสถาปนิกเทคโนโลยีสารสนเทศประเทศไทย
 
Software Trends Towards AEC 2015
Software Trends Towards AEC 2015Software Trends Towards AEC 2015
Software Trends Towards AEC 2015
 
Personal Cloud
Personal CloudPersonal Cloud
Personal Cloud
 
How would cloud computing Effect to Software Industry?
How would cloud computing  Effect to Software Industry?How would cloud computing  Effect to Software Industry?
How would cloud computing Effect to Software Industry?
 
Impact of cloud computing to Asian IT Industry
Impact of cloud computing  to Asian IT IndustryImpact of cloud computing  to Asian IT Industry
Impact of cloud computing to Asian IT Industry
 
พิชิตคู่แข่ง แซงหน้าด้วยไอที ยุคใหม่
พิชิตคู่แข่ง แซงหน้าด้วยไอที ยุคใหม่พิชิตคู่แข่ง แซงหน้าด้วยไอที ยุคใหม่
พิชิตคู่แข่ง แซงหน้าด้วยไอที ยุคใหม่
 
รายชื่อผู้สมควรได้รับใบประกาศเกียรติคุณโครงการวิทยาศาสตร์สู่ความเป็นเลิศ]
รายชื่อผู้สมควรได้รับใบประกาศเกียรติคุณโครงการวิทยาศาสตร์สู่ความเป็นเลิศ]รายชื่อผู้สมควรได้รับใบประกาศเกียรติคุณโครงการวิทยาศาสตร์สู่ความเป็นเลิศ]
รายชื่อผู้สมควรได้รับใบประกาศเกียรติคุณโครงการวิทยาศาสตร์สู่ความเป็นเลิศ]
 
พิชิตคู่แข่ง แซงหน้าด้วยไอที ยุคใหม่
พิชิตคู่แข่ง แซงหน้าด้วยไอที ยุคใหม่พิชิตคู่แข่ง แซงหน้าด้วยไอที ยุคใหม่
พิชิตคู่แข่ง แซงหน้าด้วยไอที ยุคใหม่
 
ไอซีทีกับการเปลี่ยนแปลงของสังคมไทย
ไอซีทีกับการเปลี่ยนแปลงของสังคมไทย ไอซีทีกับการเปลี่ยนแปลงของสังคมไทย
ไอซีทีกับการเปลี่ยนแปลงของสังคมไทย
 
Cloud Computing กับการใช้งานในองค์กรต่างๆ
Cloud Computing กับการใช้งานในองค์กรต่างๆCloud Computing กับการใช้งานในองค์กรต่างๆ
Cloud Computing กับการใช้งานในองค์กรต่างๆ
 
3G กับอนาคต ธุรกิจแอพพลิเคชันในเมืองไทย
3G กับอนาคต ธุรกิจแอพพลิเคชันในเมืองไทย3G กับอนาคต ธุรกิจแอพพลิเคชันในเมืองไทย
3G กับอนาคต ธุรกิจแอพพลิเคชันในเมืองไทย
 
บทความ Google vs. Android
บทความ Google vs. Android  บทความ Google vs. Android
บทความ Google vs. Android
 
IT trends for co-creation
IT trends for co-creationIT trends for co-creation
IT trends for co-creation
 
Technology Trends & The Impact for Software Industry
Technology Trends & The Impact for Software IndustryTechnology Trends & The Impact for Software Industry
Technology Trends & The Impact for Software Industry
 
อยากอยู่ 110 ปี
อยากอยู่ 110 ปี อยากอยู่ 110 ปี
อยากอยู่ 110 ปี
 
Open
OpenOpen
Open
 
Intermediate Java Programming Language (in Thai)
Intermediate Java Programming Language (in Thai)Intermediate Java Programming Language (in Thai)
Intermediate Java Programming Language (in Thai)
 

Java Programming: การเขียนโปรแกรมภาษาจาวาเชิงอ็อบเจกต์

  • 1. บทท 6 การพฒนาโปรแกรมภาษาจาวาเชงออบเจกต (Object Oriented Java Programming) ผศ.ธนศา เคร$อไวศยวรรณ คณะเทคโนโลย.สารสนเทศ สถาบนเทคโนโลย.พระจอมเกล5าเจ5าค6ณทหารลาดกระบง
  • 2. วตถประสงค อธบายเมธอด และการเรยกใช$เมธอด อธบายคยเวรดทใช$เป%น modifier ของเมธอด แนะน'าการเขยนโปรแกรมภาษาจาวาเชงออบเจกต อธบายคณลกษณะเด=นของโปรแกรมเชงออบเจกต อธบายความหมายของ Constructor  แนะนDาคลาสประเภท Wrapper  อธบายเมธอดของคลาสท.Fช$Fอ Object  ค.ยGเวรGดอ$Fนๆ ท.FสDาคญ  แนะนDาคลาสภายใน Generic และ คDาสFง Annotation
  • 3. รKปแบบการเรยกใช$เมธอด ร*ปแบบของคDาสFงท.ม.การเร.ยกใช5เมธอดเปLนดงน.M F obj.methodName([arguments]);  arguments อาจจะเปLนข$อม*ลค+าคงทหร-อตวแปร ชนดข5อมKลของ arguments ท.Fใช5ในการเร.ยกเมธอด จะต$องสอดคล$องกน กบชนดข5อมKลของ arguments ของเมธอด
  • 4. การเร.ยกใช5เมธอด เมธอดท.FกDาหนดขNMนในคลาสใดๆสามารถเร.ยกใช5งานได5สองรKปแบบค$อ • การเร.ยกใช5งานจากคลาสท.ต=างกน F • การเร.ยกใช5งานภายในคลาสเด.ยวกน การเร.ยกใช5เมธอดจากคลาสท.Fตางกน จะต5องม.การสร5างอPอบเจกตGของคลาส = ท.Fม.เมธอดท.FจะถKกเร.ยกใช5งานก=อน จNงจะสามารถเร.ยกใช5เมธอดได5 การเร.ยกใช5เมธอดภายในคลาสเด.ยวกน ในบางกรณ.จะสามารถทDาได5โดยไม= จDาเปLนต5องสร5างอPอบเจกตGของคลาสขNนมาก=อน และสามารถเร.ยกเมธอดได5 M ท6กเมธอด
  • 5. ตวอย+างโปรแกรมทม.การเร.ยกใช5เมธอดจากคลาสต=างกน public class NumericalClass { public void calculate() { double score = Math.random()*100; if (score >= 80) { System.out.println("Grade is A"); } else if (score >= 70) { System.out.println("Grade is B"); } else if (score >= 60){ System.out.println("Grade is C"); } else if (score >= 50){ System.out.println("Grade is D"); } else { System.out.println("Grade is F"); } } }
  • 6. ตวอย+างโปรแกรมทม.การเร.ยกใช5เมธอดจากคลาสต=างกน public class MyMain { public static void main(String args[]) { NumericalClass obj = new NumericalClass(); obj.calculate(); } }
  • 7. ตวอย+างโปรแกรมทม.การเร.ยกใช5เมธอดในคลาสเด.ยวกน public class NumericalClass { public void calculate() { double score = Math.random()*100; if (score >= 80) { System.out.println("Grade is A"); } else if (score >= 70) { System.out.println("Grade is B"); } else if (score >= 60){ System.out.println("Grade is C"); } else if (score >= 50){ System.out.println("Grade is D"); } else { System.out.println("Grade is F"); } } public void callMethod() { calculate(); } }
  • 8. การส=งผ+าน argument กรณทเมธอดม argument ทจะรบค+าเพ$อนDาไปใช5ในเมธอด อาทเช+น F public void setGPA(double GPA) { ... } ค'าสงท.เรยกใช5เมธอดน0 จะต$องส+ง argument ท.Fมชนดข5อมKลเปLน double F . ไปพร5อมกบช$Fอเมธอด เช=น setGPA(3.0);
  • 9. ตวอย+างโปรแกรม public class Student { String id; String name; double gpa; public void setGPA(double GPA) { gpa = GPA; } public double getGPA() { return gpa; } } -------------------------------------------------------------- public class MyMain2 { public static void main(String args[]) { Student s1 = new Student(); s1.setGPA(3.0); } }
  • 10. argument ของเมธอด argument ของเมธอดจะม.ชนดข5อมKลเปLนสองแบบตามชนดข5อมKลของ ตวแปรดงน.M • argument ท.Fม.ชนดข5อมKลแบบพ$Mนฐาน • argument ท.Fม.ชนดข5อมKลแบบอ5างอง ในกรณ.ของ argument ท.Fม.ชนดข5อมKลแบบพ$นฐาน เราสามารถท.Fจะส=งค=าคงท.F M ข5อมKล ตวแปร หร$อนพจนGให5กบ argument ได5 ตวอย=างเช=น • ค=าคงท.ข5อมKล เช=น F s1.setGPA(3.0); • ตวแปร เช=น double x = 3.0; s1.setGPA(x); • นพจนG เช=น s1.setGPA(3.0+0.05);
  • 11. argument ทมชนดข$อม*ลแบบอ$างอง เราจะต5องส=งอPอบเจกตGท.Fม.ชนดข5อมKลท.สอดคล5องไปเท=านMน F ยกเว5นกรณ.ท.F argument นMนม.ชนดข5อมKลเปLน String ซNFงในกรณ.นจะ .M สามารถส=งข5อมKลค=าคงท.ได5 F
  • 12. ตวอย+างโปรแกรมทม.การส=ง argument ท.เปLนอPอบ F เจกตG public class StudentV1 { String id; String name; MyDate dob; public void setDOB(MyDate d) { dob = d; } public MyDate getDOB() { return dob; } } ------------------------------------------------------------------------------------------ public class TestStudentV1 { public static void main(String args[]) { StudentV1 s1 = new StudentV1(); MyDate d1 = new MyDate(16, 12, 1980); s1.setDOB(d1); } }
  • 13. ตวอย+างโปรแกรมคลาส MyDate public class MyDate { private int day; private int month; private int year; public MyDate(int d, int m, int y) { day = d; month = m; year = y; } public void setDay(int d) { day = d; } public void setMonth(int m) { month = m; } public void setYear(int y) { year = y; } public void showDetails() { System.out.println("Date : " + day + "/" + month + "/" + year); } }
  • 14. ชนดข5อมKลและจDานวนของ argument ชนดข5อมKลของ argument ท.จะส=งผ=านไปยงเมธอดไม=จDาเปLนท.Fจะต5องเปLน F ชนดข5อมKลเด.ยวกน แต=ตองเปLนชนดข5อมKลท.Fสามารถแปลงข5อมKลให5กว5างขNMน 5 ได5โดยอตโนมต เมธอดใดๆอาจม. argument สDาหรบรบค=ามากกว=าหนNงตว แต=การเร.ยกใช5 F เมธอดเหล=าน.Mจะต5องส=ง argument ท.ม.ชนดข5อมKลท.Fสอดคล5องกนและม. F จDานวนเท=ากน
  • 15. ตวอย+างโปรแกรมทม.การส=ง argument จDานวนสองตว public class NumericalSample { public void calMax(int i, double d) { if (i > d) { System.out.println("Max = "+i); } else { System.out.println("Max = "+d); } } public static void main(String args[]) { NumericalSample obj = new NumericalSample(); obj.calMax(3,4.0); } }
  • 16. การเปล.Fยนแปลงค=าของ argument การส=ง argument ท.มชนดข$อม*ลเป%นแบบพ-นฐาน หากมการเปลยนแปลงค+า F 0 ของ argument ภายในเมธอดทถ*กเรยกใช$งาน จะไม+มผลท'าให$ค+าของ argument ทส+งไปเปลยนค+าไปด$วย การส=ง argument ท.มชนดข$อม*ลเป%นแบบอ$างอง จะเป%นการส+งต'าแหน+ง F อ$างองของออบเจกตไปให$กบเมธอดทถ*กเรยกใช$งาน ดงน0นการเปลยนแปลง ค+าของคณลกษณะของอPอบเจกตGจะมผลท'าให$ค+าของคณลกษณะของออบ เจกตทส+งไปเปลยนไปด$วย
  • 17. ตวอย+างโปรแกรมทแสดงการเปล.Fยนแปลงค=าของ argument public class ArgumentPassing { public void method1(int x) { x = 3; } public void method2(MyDate d) { d.setDay(1); d.setMonth(1); d.setYear(2002); } public int method3() { return 0; }
  • 18. ตวอย+างโปรแกรมทแสดงการเปล.Fยนแปลงค=าของ argument public static void main(String args[]) { int x = 4; ArgumentPassing obj = new ArgumentPassing(); MyDate d1 = new MyDate(16, 12, 1980); obj.method1(x); System.out.println("x = " + x); obj.method2(d1); d1.showDetails(); obj.method3(); } }
  • 19. การรบค=าท.Fสงกลบมาจากเมธอด = เมธอดใดๆของคลาสสามารถท.Fจะม.ค=าท.ส=งกลบมาได5 ซNFงชนดข5อมKลของค=าท.F F จะส=งกลบอาจเปLนชนดข5อมKลแบบพ$Mนฐาน หร$อเปLนชนดข5อมKลแบบอ5างอง เมธอดท.Fม.ค=าท.Fจะส=งกลบมาจะต5องม.คDาสFง return ซNFงจะระบ6ค=าท.Fสงกลบ = โดยม.รKปแบบดงน.M return value; คDาสFงท.เร.ยกใช5เมธอด อาจจะรบค=าท.FสงกลบมาเกPบไว5ในตวแปรหร$อเปLนตว F = ถKกดDาเนนการในนพจนG ตวอย=างเช=น double d = getGPA(); System.out.println("GPA:"+getGPA());
  • 20. modifier ของเมธอด modifier ของเมธอดประกอบด5วย • access modifier • static • abstract • synchronized • final access modifier ใช5เพ$อระบ6ระดบการเข5าถNง โดยม.ค.ยGเวรGดต=างๆดงน.M F • public • protected • private • default (ไม+ระบ ค.ยเวรGดใดๆ บ6 G )
  • 21. ตวอย+างโปรแกรมทแสดงการประกาศเมธอดและค6ณลกษณะ public class PrivateStudent { private String id; private String name; private double gpa; public void setDetails(String ID,String n,double GPA) { id = ID; name = n; gpa = GPA; } public void showDetails() { System.out.println("ID: "+id); System.out.println("Name: "+name); System.out.println("GPA: "+gpa); } }
  • 22. ตวอย+างโปรแกรมทแสดงการประกาศเมธอดและค6ณลกษณะ public class TestPrivateStudent { public static void main(String args[]) { PrivateStudent ps = new PrivateStudent(); /* ps.id = "12345"; illegal ps.name = "Thana"; illegal ps.gpa = 3.25; illegal */ ps.setDetails("12345","Thana",3.25); ps.showDetails(); } }
  • 23. การเข.ยนโปรแกรมโดยใช5หลกการของการห=อห65ม ค6ณลกษณะเด=นของโปรแกรมเชงอPอบเจกตGม.อยK=สามอย=างค$อ การห=อห6ม 5 การส$บทอด และการม.ได5หลายรKปแบบ ข5อด.ของการห=อห65มประการหนNFงค$อการซ=อนเร5นข5อมKล หลกการห=อห65มของอPอบเจกตGทDาได5ดงน.M • กDาหนดค6ณลกษณะของอPอบเจกตGให5ม. modifier เปLน private เพ$Fอซ=อนไม=ให5อPอบ เจกตGอ$Fนๆเร.ยกใช5ได5 • กDาหนดเมธอดของอPอบเจกตGทตองการให5อPอบเจกตGอ$Fนๆเร.ยกใช5ให5ม. modifier เปLน .F 5 public
  • 24. ตวอย+างโปรแกรมท.Fไม=ได5ใช5หลกการของการห=อห65ม public class Student { String ID; String name; public double gpa; } -------------------------------------------------------------------------------------------------- public class NoEncapDemo { public static void main(String args[]) { Student s1 = new Student(); double temp = Double.parseDouble(args[0]); if ((temp<0) || (temp>4.00)) { System.out.println("Incorrect Format!"); } else { s1.gpa = temp; System.out.println("GPA: "+s1.gpa); } } }
  • 25. เมธอดแบบ setter เมธอดแบบ accessor แบ=งออกได5เปLนสองประเภทค$อ • เมธอดแบบ setter • เมธอดแบบ getter เมธอดแบบ setter จะใช5ในการกDาหนดค=าของค6ณลกษณะ โดยทFวไปช$Fอของเมธอดแบบ setter จะขNนต5นด5วยคDาว=า set แล5วตามด5วยช$Fอ M ของค6ณลกษณะ ซNFงม.รปแบบดงน.M K public void setAttributeName(dataType arg) { attributeName = arg; }
  • 26. ตวอย+างโปรแกรมท.Fใช5หลกการของการห=อห65ม public class Student { String ID; String name; private double gpa; public void setGPA(double GPA) { if ((GPA<0) || (GPA>4.00)) { System.out.println("Incorrect Format!"); } else { gpa = GPA; } } public double getGPA() { return gpa; } } -------------------------------------------------------------------------------------------------- public class EncapDemo { public static void main(String args[]) { Student s1 = new Student(); double temp = Double.parseDouble(args[0]); s1.setGPA(temp); System.out.println("GPA: "+s1.getGPA()); } }
  • 27. เมธอดแบบ getter เมธอดแบบ getter จะใช5ในการเร.ยกค=าของค6ณลกษณะ โดยทFวไปช$Fอของเมธอดแบบ getter จะขNMนต5นด5วยคDาว=า get แล5วตามด5วยช$Fอ ของค6ณลกษณะ ซNFงม.รปแบบดงน.M K public dataType getAttributeName() { return attributeName; }
  • 28. ตวอย+างโปรแกรมท.Fใช5หลกการของการห=อห65ม public class EncapStudent { private String id; private String name; private double gpa; public void setID(String ID) { id = ID; } public void setName(String n) { name = n; } public void setGPA(double GPA) { if ((GPA<0) || (GPA>4.00)) { System.out.println("Incorrect Format!"); } else { gpa = GPA; } }
  • 29. ตวอย+างโปรแกรมท.Fใช5หลกการของการห=อห65ม public String getID() { return id; } public String getName() { return name; } public double getGPA() { return gpa; } }
  • 30. ค.ยเวรGด this G ค.ยเวรGด this หมายถNงอPอบเจกตGของตวเอง เราสามารถท.จะเร.ยกใช5เมธอดหร$อค6ณลกษณะภายในคลาสได5โดยใช5 F ค.ยGเวรGด this ซNFงม.รปแบบดงน.M K this.methodName(); this.attributeName โดยทFวไปเราจะไม=ใช5ค.ยเวรGด this ในคDาสFง ยกเว5นในกรณ.ท.FจDาเปLน G
  • 31. ตวอย+างโปรแกรมการใช$ this public class ThisStudent { private String id; private String name; private double gpa; public void setDetails(String id,String name, double gpa) { this.id = id; this.name = name; this.gpa = gpa; } public void showDetails() { System.out.println("ID: "+this.id); System.out.println("Name: "+name); System.out.println("GPA: "+gpa); } }
  • 32. การเข.ยนโปรแกรมโดยใช5หลกการของการส$บทอด ข5อด.ของการส$บทอดค$อ การนDาคลาสท.Fม.อยK=แล5วมาใช5ใหม=โดยการเพFมเตม ค6ณลกษณะหร$อเมธอดในคลาสใหม= การพฒนาคลาสขNMนใหม=ทช$Fอ GradStudent .F สามารถท.จะเล$อกวธ.การได5 F สองแบบค$อ • สร5างคลาสขNMนมาใหม=โดยไม=อ5างองกบคลาสเดมท.Fชอ Student $F • สร5างคลาสท.สบทอดมาจากคลาสเดมท.ช$Fอ Student F $ F
  • 33. ตวอย+างโปรแกรมแสดงคลาสท.ช$Fอ Student F public class Student { private String id; private String name; private double gpa; public void setID(String ID) { id = ID; } public void setName(String n) { name = n; } public void setGPA(double GPA) { gpa = GPA; } public void showDetails() { System.out.println("ID: "+id); System.out.println("Name: "+name); System.out.println("GPA: "+gpa); } }
  • 34. ตวอย+างโปรแกรมท.ไม=ได5ใช5หลกการของการส$บทอด F public class GradStudent { private String id; private String name; private double gpa; private String thesisTitle; private String supervisor; public void setID(String ID) { id = ID; } public void setName(String n) { name = n; } public void setGPA(double GPA) { gpa = GPA; }
  • 35. ตวอย+างโปรแกรมท.ไม=ได5ใช5หลกการของการส$บทอด F public void setThesisTitle(String t) { thesisTitle = t; } public void setSupervisor(String s) { supervisor = s; } public void showThesis() { System.out.println("ThesisTitle: "+thesisTitle); System.out.println("Supervisor: "+supervisor); } }
  • 36. ตวอย+างโปรแกรมท.ใช5หลกการของการส$บทอด F public class GradStudent extends Student { private String thesisTitle; private String supervisor; public void setThesisTitle(String t) { thesisTitle = t; } public void setSupervisor(String s) { supervisor = s; } public void showThesis() { System.out.println("ThesisTitle: "+thesisTitle); System.out.println("Supervisor: "+supervisor); } }
  • 38. ตวอย=างการส$บทอดท.ไม=ถKกต5อง F เราสามารถท.ตรวจสอบหลกการของการส$บทอดด5วยคDาว=า is a F public class Shirt { char size; float price; } public class Skirt extends Shirt { boolean long; }
  • 39. ตวอย=างการส$บทอดท.Fถกต5อง K public class Clothing { char size; float price; } public class Shirt extends Clothing { } public class Skirt extends Clothing { boolean long; }
  • 40. ค.ยGเวรGด protected ค6ณลกษณะหร$อเมธอดของ superclass ท.Fม. modifier เปLนแบบ private จะทDาให5 subclass ไม=สามารถท.Fจะเร.ยกใช5ได5 ภาษาจาวากDาหนดให5ม. access modifier ท.ช$Fอ protected ซNFงจะทDาให5 F subclass สามารถเร.ยกใช5เมธอดหร$อค6ณลกษณะของ superclass ได5 ตวอย=างเช=น protected String name;
  • 41. ค.ยGเวรGด protected ภาษาจาวากDาหนดให5ม. access modifier ท.ช$Fอ protected ซNFงจะทDาให5คลาสท.F F เปLน subclass สามารถท.Fจะเร.ยกใช5เมธอดหร$อค6ณลกษณะของ superclass ได5 แม5ว=าจะอยKต=างคลาสหร$ออยKต=างแพคเกPจกนกPตาม = = คลาสท.อยK= F คลาสท.F คลาส modifier ในแพจเกPจ เปLนsubcla คลาสใดๆ เด.ยวกน เด.ยวกน ss √ √ √ √ public √ √ √ protected √ √
  • 42. ตวอย=างโปรแกรมท.Fใช5คยเวรGด protected . G public class Student { protected String id; protected String name; protected double gpa; public void setDetails(String ID,String n,double GPA) { id = ID; name = n; gpa = GPA; } public void showDetails() { System.out.println("ID: "+id); System.out.println("Name: "+name); System.out.println("GPA: "+gpa); } }
  • 43. คลาสท.Fช$Fอ Object ภาษาจาวาได5กDาหนดให5คลาสใดๆ สามารถจะส$บทอดคลาสอ$Fนได5เพ.ยง คลาสเด.ยวเท=านMน คลาสท6กคลาสในภาษาจาวาถ5าไม=ได5สบทอดจากคลาสใดเลยจะถ$อว=าคลาส $ นMนส$บทอดจากคลาสท.ช$Fอ Object F ตวอย=างเช=น public class Student extends Object { ... } คลาสท.ช$Fอ Object จะม.เมธอดท.สDาคญค$อ F F public String toString() และ public boolean equals(Object o)
  • 44. ค.ยเวรGด super G  super เปLนค.ยGเวรGดท.ใช5ในการอ5างองถNง superclass เพ$อท.จะเร.ยกใช5 F F F เมธอดหร$อ constructor ของ superclass โดยม.รปแบบคDาสFงดงน.M K super.methodName([arguments]) ตวอย=างเช=น คลาส GradStudent อาจม.เมธอดท.ช$Fอ showDetails() F โดยม.คDาสFงท.Fเร.ยกใช5เมธอด showDetails() ของคลาส Student และ showThesis() ของคลาส GradStudent public void showDetails() { super.showDetails(); showThesis(); }
  • 45. ตวอย=างโปรแกรมท.Fใช5คยGเวรGด super . public class Student { private String id; private String name; private double gpa; public void showDetails() { System.out.println("ID: "+id); System.out.println("Name: "+name); System.out.println("GPA: "+gpa); } }
  • 46. ตวอย=างโปรแกรมท.Fใช5คยGเวรGด super . public class GradStudent extends Student { private String thesisTitle; private String supervisor; public void showDetails() { super.showDetails(); System.out.println("Thesis Title: "+ thesisTitle); System.out.println("Supervisor: "+supervisor); } }
  • 47. การเข.ยนโปรแกรมโดยใช5หลกการของการม.ได5หลายรKปแบบ การม.ได5หลายรKปแบบหมายถNง ค6ณสมบตของอPอบเจกตGของคลาสท.ต=างกน F สามารถตอบสนองต=อเมธอดเด.ยวกนในวธ.การท.Fตางกนได5 ซNFงหมายถNงการ = เข.ยนเมธอดแบบ overridden และการใช5 Dynamic Binding การเข.ยนเมธอดแบบ overridden ม.ข5อกDาหนดดงน.M • จDานวนและชนดข5อมKลของ argument จะต5องเหม$อนเดม • ชนดข5อมKลของค=าท.Fสงกลบจะต5องเหม$อนเดม = • access modifier จะต5องไม=ม.ระดบตFDากว=าเดมอาทเช=น ถ5าเมธอดเดมเปLน public จะไม=สามารถเปล.FยนเปLน private ได5
  • 48. Dynamic Binding ข5อด.ของการม.ได5หลายรKปแบบอ.กประการหนNง ค$อการท.FสามารถกDาหนดอP F อบเจกตGได5หลายรKปแบบ ตวอย=างเช=น จากรKปแบบ SuperClass obj; เราสามารถท.จะสร5างอPอบเจกตGท.Fช$Fอ obj ซNFงอาจเปLนอPอบเจกตGของคลาสท.F F เปLน superclass หร$อท.เปLน subclass ได5 โดยใช5คDาสFงท.Fม.รKปแบบดงน.M F obj = new SuperClass(); หร$อ obj = new SubClass(); ตวอย=างเช=น Student s; s = new GradStudent();
  • 49. รKปแสดงการม.ได5หลายรKปแบบ ตวอย=าง Student s1 = new Student(); Student s1 = new GradStudent(); Student s1 = new PhDStudent();
  • 50. เมธอดแบบ Overloaded ภาษาจาวาอน6ญาตให5คลาสใดๆม.เมธอดท.Fม.ช$Fอเด.ยวกนมากกว=าหนNงเมธอด F ได5 แต=เมธอดเหล=านMนจะต5องม.จDานวนหร$อชนดข5อมKลของ argument ท.ต=าง F กน ตวอย=างต=อไปน.เปLนการเข.ยนเมธอดแบบ M overloaded ท.ถKกต5อง F public void setDetails(String ID, String n) { } public void setDetails(String ID, double GPA) { } public double setDetails(double GPA, String n) { } ตวอย=างต=อไปน.เปLนการเข.ยนเมธอดแบบ M overloaded ท.ไม=ถKกต5อง F public void setDetails(String ID,double GPA) { } public void setDetails(String n,double GPA) { }
  • 51. ตวอย+างโปรแกรมแสดงเมธอดแบบ overloaded public class StudentV2 { private String id; private String name; private double gpa; public void setDetails(String ID,String n) { id = ID; name = n; } public void setDetails(String ID,String n,double GPA) { id = ID; name = n; gpa = GPA; } }
  • 52. เมธอดแบบ overridden การกDาหนดเมธอดแบบ overridden เปLนหลกการท.Fสบเน$องมาจากหลกการ $ F ของการส$บทอด โดยคลาสท.FเปLน subclass สามารถท.จะเข.ยนเมธอดของ F superclass ขNMนใหม=ได5 วธ.การน.เร.ยกว=า เมธอดใน subclass เปLนเมธอดแบบ M overridden การเข.ยนเมธอดแบบ overridden ม.ขอกDาหนดดงน.M 5 • จDานวนและชนดข5อมKลของ argument จะต5องเหม$อนเดม • ชนดข5อมKลของค=าท.Fสงกลบจะต5องเหม$อนเดม = • access modifier จะต5องไม=ม.ระดบตFDากว=าเดมอาทเช=น ถ5าเมธอดเดมเปLน public จะไม=สามารถเปล.FยนเปLน private ได5
  • 53. ตวอย+างโปรแกรมแสดงเมธอดแบบ overridden class Student { : public void showDetails() { System.out.println("ID: "+id); System.out.println("Name: "+name); System.out.println("GPA: "+gpa); } } public class GradStudentV2 extends Student { : public void showDetails() { super.showDetails(); System.out.println("ThesisTitle: "+thesisTitle); System.out.println("Supervisor: "+supervisor); } }
  • 54. Virtual Method Invocation โปรแกรมภาษาจาวาพจารณาเร.ยกใช5เมธอดจากชนดของอPอบเจกตGท.Fสร5าง ขNMน ตวอย=างเช=น คDาสFง Student s1 = new GradStudent(); s1.showDetails(); เปLนคDาสFงท.Fเร.ยกใช5เมธอด showDetails() ของคลาส GradStudent ไม=ใช= เมธอดของคลาส Student แต=คอมไพเลอรGของภาษาจาวาจะไม=อน6ญาตให5เร.ยกใช5เมธอดใดๆกPตามท.F ไม=ม.การประกาศอยKในเมธอดของ superclass ท.กDาหนดไว5 ตวอย=างเช=น = F Student s1 = new GradStudent(); s1.getSupervisor(); // Fail to compile
  • 55. การส+งผ+าน argument ได5หลายรKปแบบ ในกรณ.ท.Fเมธอดม. argument เปLนข5อมKลชนดคลาส เราสามารถท.Fจะส=ง อP อบเจกตGของคลาสท.FเปLน subclass ของคลาสนMนแทนได5 ตวอย=างเช=น คDาสFง Student s1 = new Student(); PhDStudent s2 = new GradStudent(); เราสามารถท.จะเร.ยกใช5เมธอด printInfo(Student s)ได5หลายรKปแบบ F ดงน.M printInfo(s1) printInfo(s2)  หร$อ printInfo(new FullTimeStudent())
  • 56. ตวด'าเนนการ instanceof คยเวรด instanceof เป%นตวด'าเนนการทใช$กบออบเจกตและคลาส เพ-อ ตรวจสอบว+าเป%นออบเจกตของคลาสนMนหร$อไม= โดยจะให$ผลลพธเป%นข$อม*ล ชนด boolean ถ5าได5ผลลพธเป%น true แสดงว=าอPอบเจกตGเป%นของคลาสน0นหร-อเปLนของ คลาสทคลาสนMนส-บทอดมา ตวอย+างเช+น GradStudent s1 = new GradStudent(); (s1 instanceof GradStudent) → true (s1 instanceof Student) → true (s1 instanceof Object) → true (s1 instanceof String) → Compilation fail!
  • 57. ตวอย+างเมธอดท.แสดงการใช5 instanceof F public void printInfo(Student s) { if (s instanceof PhDStudent) { System.out.println("PhD Student"); } else if (s instanceof GradStudent) { System.out.println("Graduate Student"); } else if (s instanceof FullTimeStudent) { System.out.println("Full-Time Student"); } else if (s instanceof PartTimeStudent) { System.out.println("Part-Time Student"); } else if (s instanceof Student) { System.out.println("Student"); } }
  • 58. การ Casting ออบเจกต การ Casting ออบเจกตจะทDาให5ตวแปรของ subclass สามารถท.Fจะอ$างองถ4ง ออบเจกตของ subclass ผ=านตวแปรของ superclass ได5 อาทเช=น Student s1 = new GradStudent(); GradStudent s2 = (GradStudent)s1; ภาษาจาวาจะตรวจสอบชนดของออบเจกตในช+วงของการรนโปรแกรม ดงน0น ตวแปรของ subclass จะไม=สามารถอ$างองถ4งออบเจกตของ superclass ได5 แม5ว=าจะทDาการ casting ออบเจกตแล5วกPตาม อาทเช=น Student s1 = new Student(); GradStudent s2 = (GradStudent)s1; // คอมไพลGผ=านได5 แต=จะเกดข5อผดพลาดในช=วงของการรนโปรแกรม
  • 59. การเรยกใช$เมธอดของออบเจกต การเร.ยกใช5เมธอดของอPอบเจกตGท.FทDาการ casting ภาษาจาวาจะตรวจสอบ ชนดของอPอบเจกตGในช=วงของการรนโปรแกรม ว=าอPอบเจกตGดงกล=าวเปLน อP อบเจกตGของคลาสใด และคลาสนMนม.เมธอดท.Fเร.ยกใช5หร$อไม= หากไม=พบกPจะ เกดข5อผดพลาดในช=วงของการรนโปรแกรม ตวอย=างเช=น Student s1 = new Student(); ((GradStudent) s1).getSupervisor(); // คอมไพลGผ=านได5 แต=จะเกดข5อผดพลาดในช=วงของการรนโปรแกรม
  • 60. ตวอย+างโปรแกรมแสดงการเร.ยกใช5เมธอด public class Student { private String id; private String name; private double gpa; public String getID() { return id; } public String getName() { return name; } public double getGPA() { return gpa; } }
  • 61. ตวอย+างโปรแกรมแสดงการเร.ยกใช5เมธอด public class GradStudent extends Student { private String thesisTitle; private String supervisor; public String getThesisTitle() { return thesisTitle; } public String getSupervisor() { return supervisor; } }
  • 62. ตวอย+างโปรแกรมแสดงการเร.ยกใช5เมธอด public class TestCallingMethods { public static void main(String args[]) { Student s1 = new GradStudent(); s1.getSupervisor(); // compile error Student s2 = new Student(); ((GradStudent) s2).getSupervisor(); // runtime error } }
  • 63. Constructor constructor เป%นเมธอดทมช-อเดยวกบช-อคลาส ซNงม.รปแบบดงน.M F K [modifier] ClassName([arguments]) { [statements] } constructor เปLนเมธอดท.ไม=ม.ค=าท.จะส=งกลบแต=ไม=ตองระบ6ค.ยGเวรGด void F F 5 โดยทวไปคลาสทกคลาสจะม default constructor ซNงม.รปแบบดงน.M F K public ClassName() { } เราสามารถทจะเขยน constructor ในคลาสใดๆขNMนมากได$ default constructor จะหายไปเม-อมการเขยน constructor ข40นใหม+
  • 64. ตวอย+างโปรแกรมแสดงการเร.ยกใช5 constructor public class Student { private String id; private String name; public Student(String ID,String n) { id = ID; name = n; } } public class TestConstructor { public static void main(String args[]) { Student s = new Student(); //illegal Student s = new Student("1122","Somchai"); } }
  • 65. ค'าสง new() มข0นตอนการท'างานดงน0 • ก'าหนดเน-0อทในหน+วยความจ'าให$กบออบเจกต • ก'าหนดค+าเรมต$นให$กบคณลกษณะของออบเจกต • กDาหนดค=าของค6ณลกษณะของอPอบเจกตGตามคDาสFงกDาหนดค=าท.Fประกาศไว5 • เรยกใช$ constructor ตวอย=างเช=น public class MyDate { private int day = 1; private int month = 1; private int year = 2000; public MyDate(int d,int m,int y) { day = d; month = m; year = y; } }
  • 66. รKปแสดงตวอย=างการทDางานขMนตอนคDาสFง new คDาสFง MyDate d1 = new MyDate(16,8,1972); ขMนตอนท.หนNFง F ขMนตอนท.สอง F ขMนตอนท.สาม F ขMนตอนท.ส.F F
  • 67. Constructor แบบ Overloaded เราสามารถท.จะสร5าง constructor แบบ overloaded ของคลาสได$ F constructor แบบ overloaded จะมจ'านวนหร-อชนดข$อม*ลทแตกต+างกนของ arguments ค'าสง new ท.ใช5ในการสร5างอPอบเจกตGจะเร.ยกใช5 constructor ท.ม. argument F F ท.Fสงผ=านมาสอดคล5องกบ constructor ท.กDาหนด = F ข5อด.ของการสร5าง constructor แบบ overloaded ค$อทDาให5เราสามารถท.F สร5างอPอบเจกตGเรFมต5นได5หลายรKปแบบ เมธอดท.Fช$Fอ this() เปLนการเร.ยกใช5 constructor ของคลาสตวเอง โดยจะ ต5องเปLนคDาสFงแรกส6ดท.FอยK=ใน constructor แบบ overloaded
  • 68. ตวอย+างโปรแกรมแสดง constructor แบบ overloaded public class Student { private String id; private String name; private double gpa; public Student(String ID,String n) { id = ID; name = n; } public Student(String ID,String n,double GPA) { id = ID; name = n; gpa = GPA; } }
  • 69. เมธอด this() เมธอดท.Fช$Fอ this() เปLนการเร.ยกใช5 constructor ของคลาสตวเอง โดยจะ ต5องเปLนคDาสFงแรกส6ดท.FอยK=ใน constructor แบบ overloaded
  • 70. ตวอย+างโปรแกรมแสดงการใช5เมธอด this() public class Student { private String id; private String name; private double gpa; public Student(String ID,String n) { id = ID; name = n; } public Student(String ID,String n,double GPA) { this(ID,n); gpa = GPA; } }
  • 71. เมธอด super() constructor ของ superclass จะไม+สบทอดมายง - subclass เราสามารถท.จะเร.ยกใช5 constructor ของ superclass ได5โดยใช5เมธอดท.Fช$Fอ F super() โดยส=งผ=าน argument ท.Fสอดคล5องกน เมธอด super() จะต5องเปLนคDาสFงแรกของ constructor เช=นเด.ยวกบ เมธอดท.Fช$Fอ this() โดยทFวไปการทDางานของ constructor ของคลาสใดๆจะม.ผลทDาให5ม.การ เร.ยกใช5 constructor ของ superclass นMน ซNงถ5าไม=ม.คDาสFง super() อยKใน F = คDาสFงแรกของ constructor ของคลาสนMน ภาษาจาวาจะเร.ยกใช5 constructor แบบ default ของ superclass นMนโดยอตโนมต
  • 72. ตวอย+างการเร.ยกใช5 constructor ของ superclass public class StudentV1 { protected String name; public StudentV1(String n) { name = n; } } ------------------------------------------------------ public class GradStudentV1 extends StudentV1 { public GradStudentV1(String n) { name = n; /* compile error should be super(n) */ } }
  • 73. ข0นตอนการท'างานของ constructor • ถ5าม.คDาสFง this() ใน constructor กPจะเร.ยกใช5 constructor แบบ overloaded ท.สอดคล5องกบคDาสFง this() แล5วข5ามไปขMนตอนท.F 3 F • เร.ยกใช5 constructor ของ superclass ถ5าไม=ม.คDาสFง super() จะเร.ยกใช5 constructor แบบ default ยกเว5นคลาสท.Fช$Fอ Object จะไม=ม.การเร.ยกใช5 constructor ของ superclass เน$Fองจากคลาสท.Fช$Fอ Object จะไม=ม. superclass • เร.ยกใช5คDาสFงกDาหนดค=าเรFมต5นของค6ณลกษณะของอPอบเจกตG • เร.ยกใช5คDาสFงภายใน constructor ของคลาสท.ใช5นน F M
  • 74. ตวอย+างคลาสท.Fม. constructor ในรKปแบบต=างๆ public class Student { protected String name; public Student(String n) { name = n; } } public class GradStudent extends Student { public GradStudent(String n) { super(n); } public GradStudent() { this(" "); } }
  • 75. เมธอดของคลาสท.ช$Fอ Object F คลาสท.ช$Fอ Object จะเปLนคลาสท.ท6กๆคลาสจะส$บทอดมา F F เมธอดของคลาส Object ทส'าคญค-อ • toString() เป%นเมธอดทใช$ในการแปลงค+าของออบเจกตให$เป%น String ซNFงจะส=งค=ากลบเปLน ข5อมKลชนดคลาส String • equals(Object o) เปLนเมธอดท.Fใช5ในการเปร.ยบเท.ยบค=าของอPอบเจกตG ซNFงจะส=งค=ากลบเปLนข5อมKลชนด boolean
  • 76. เมธอด toString() คลาสทต$องการจะแปลงข$อม*ลเป%น String จะต5องม.เมธอดแบบ overriden ท.Fช$Fอ toString() เช=นคลาส Date ได5กDาหนดคDาสFงสDาหรบเมธอด toString() ไว5แล5ว ดง นMนการเร.ยกใช5เมธอด System.out.println()โดยท.F argument เปLนอP อบเจกตGของคลาส Date จะทDาให5ม.การเร.ยกใช5เมธอด toString() ของ คลาส Date โดยอตโนมต ตวอย=างเช=น คDาสFง Date d = new Date(); System.out.println(d);
  • 77. ตวอย+างโปรแกรมแสดงเมธอด toString() public class Student { private String name; public Student(String n) { name = n; } public String toString() { return name; } } public class TestToString { public static void main(String args[]) { Student s1 = new Student("Thana"); System.out.println(s1); } } ผลลพธGท.Fได5จากการรนโปรแกรม Thana
  • 79. ตวอย+างโปรแกรมแสดงเมธอด equals() class Student { private String name; public Student(String n) { name = n; } public boolean equals(Object obj) { if (obj.equals(name)) { return true;} else return false; } } public class TestEquals { public static void main(String args[]) { Student s1 = new Student("Thana"); Student s2 = new Student("Thana"); System.out.println(s1.equals(s2)); } } ผลลพธGท.Fได5จากการรนโปรแกรม true
  • 80. คลาสประเภท Wrapper คลาสประเภท Wrapper จะช=วยในการสร5างอPอบเจกตGท.FเกPบชนดข5อมKลแบบ พ$นฐานไว5ในคอลเลPกชFนแบบ Heterogeneous M คลาสประเภท Wrapper ม.ดงน.M
  • 81. ตวอย=างโปรแกรมแสดงการใช5คลาสประเภท Wrapper public class ShowWrapper { public static void main(String args[]) { Boolean b = new Boolean(true); Character c = new Character('A'); Double d = new Double(1.234); System.out.println(b); System.out.println(c); System.out.println(d); } } true ผลลพธGทได5จากการรนโปรแกรม .F A 1.234
  • 82. Autoboxing และ Auto-unboxing  คDาสFง Autoboxing ค$อการแปลงจากชนดข5อมKลพ$นฐานเช=น intไปเปLนคลาส M ประเภท Wrapper เช=น Integer คDาสFง Auto-unboxing ค$อการแปลงจากคลาสประเภท Wrapper เช=น Byte ไปเปLนชนดข5อมKลพ$นฐานเช=น byte M
  • 83. ตวอย=างการใช5คDาสFง Auto-boxing/Auto-unboxing public class ShowWrapper { public static void main(String []args) { Integer myInt = 1; // int into Integer System.out.println(myInt); int i = myInt + 3; // mix Integer and int System.out.println(i); } } ผลลพธGทได5จากการรนโปรแกรม .F 1 4
  • 84. ค6ณลกษณะแบบ static คยเวรด static สามารถทจะใช$กบค6ณลกษณะและเมธอดของคลาสได$ ค6ณลกษณะของคลาสทเป%นแบบ static จะเป%นค6ณลกษณะททกออบ M เจกตของคลาสน.ใช$ร+วมกน ค6ณลกษณะของคลาสทเป%นแบบ static สามารถถKกเรยกใช$จากช-อของ คลาสได$โดยไม+จ'าเป%นต$องสร$างออบเจกต อาทเช+น • Student.counter
  • 85. ตวอย+างโปรแกรมแสดงการใช5ค.ยเวรGด static G public class Student { static int counter; public Student() { counter++; } } public class TestStatic { public static void main(String args[]) { Student s1 = new Student(); Student s2 = new Student(); System.out.println(Student.counter); System.out.println(s1.counter); System.out.println(s2.counter); } } 2 2 ผลลพธGท.Fได5จากการรนโปรแกรม 2
  • 86. เมธอดแบบ static เมธอดโดยทวไปจะม. modifier เป%นแบบ non-static เมธอดทม modifier เป%นแบบ static จะสามารถถKกเรยกใช$งาน โดยใช$ชอ - คลาสได5เลยไม+จ'าเป%นต$องสร$างออปเจกของคลาสนMนข40นมาก+อน ซNFงม.รปแบบ K ดงน0 className.methodName(); ตวอย+างเช+น เมธอดทกเมธอดในคลาส Math เป%นแบบ static ดงน0นการ เร.ยกใช5งานท6กเมธอดในคลาสสามารถทDาได5 เช=น Math.sqrt(4); เมธอดแบบ static จะไม+สามารถเรยกใช$เมธอดหร-อตวแปรของอPอบเจกตG ได$โดยตรง
  • 87. Static Initializer Static Initializer ค-อบลอกในคลาสใดๆทอย*+นอกเมธอด และมคยเวรด static เพ-อนยามให$เป%นบลอกแบบ static รKปแบบของ Static Initializer static { ... } ค'าสงในบลอกแบบ static จะถ*กเรยกใช$เพยงคร0งเดยวเม-อ JVM โหลด คลาสดงกล+าวข40นมา Static Initializer ใช$ในการด.บก (debug) โปรแกรม หร-อใช5ในกรณ.ทต5องกา .F รสร5างอPอบเจกตGของคลาสขNMนโดยอตโนมต เราสามารถท.จะกDาหนดบลPอกแบบ static ได5มากกว=าหนNงบลPอก โดยการ F F ทDางานจะถKกเร.ยงจากบนลงล=าง
  • 88. ตวอย+างโปรแกรมแสดง Static Initializer public class TestStaticBlock { static int x=5; static { x += 1; } public static void main(String args[]) { System.out.println("x = "+x); } static { x /= 2; } } ผลลพธGท.Fได5จากการรนโปรแกรม x = 3
  • 89. คยเวรด final คยเวรด final สามารถจะใช$ได$กบคลาส ตวแปร และเมธอด คลาสทม modifier เป%น final จะทDาให5คลาสอ$Fนไม+สามารถส-บทอดคลาสน.M ได$ เมธอดทม modifier เป%น final ค$อเมธอดท.Fจะไม=สามารถม.เมธอดแบบ overriden ได5 ตวแปรทม modifier เป%น final ค-อค+าคงท ซNFงจะทDาให5สามารถกDาหนดค=า ได5เพ.ยงครMงเด.ยวเท=านMน
  • 90. คลาสภายใน คลาสภายใน (Inner class) ค$อคลาสท.FประกาศอยK=ภายในคลาสอ$Fนๆ ซNFงบาง ครMงเร.ยกว=าคลาสแบบซ5อน (nested class) คลาสภายในอน6ญาตให5ประกาศค6ณลกษณะหร$อเมธอดภายในคลาสอ$Fนได5 คลาสภายในม.ประโยชนGในกรณ.ท.Fตองการจะจดกล6=มของคลาสท.FตองทDางาน 5 5 ร=วมกน โดยต5องการควบค6มไม=ให5ม.การเข5าถNงโดยตรงจากคลาสอ$Fนๆ และ ต5องการเร.ยกใช5ค6ณลกษณะหร$อเมธอดของคลาสท.อยK=ภายนอกได5โดยตรง F คลาสภายในทใช$ในภาษาจาวาแบ+งออกเป%น • คลาสภายในทอย*+ภายในคลาสโดยตรง • คลาสภายในทอย*+ภายในเมธอด
  • 91. คลาสภายในท.อยKภายในคลาส F = กรณ.นเปLนการประกาศคลาสภายในคลาสอ$Fนท.Fเร.ยกว=า คลาสภายนอก .M (Outer class) คลาสภายในสามารถม access modifier เป%น public, private, default หร$อ protected ได5 การสร5างอPอบเจกตGของคลาสภายในม.ขอแตกต=างดงน.M 5 • การสร5างอPอบเจกตGของคลาสภายในนอกคลาสภายนอก จะต5องทDาการสร5างอPอบ เจกตGของคลาสภายนอกก=อน แล5วจNงสร5างอPอบเจกตGของคลาสภายในได5 • การสร5างอPอบเจกตGภายในเมธอดท.อยK=ในคลาสภายนอกสามารถทDาได5โดยตรง F คลาสท.อยK=ภายในสามารถท.Fจะเร.ยกใช5ค6ณลกษณะและเมธอดของคลาส F ภายนอกได5
  • 92. ตวอย+างโปรแกรมแสดงคลาสทอย*+ภายในคลาส public class Outer { public void method1() { Inner in1 = new Inner(); in1.method2(); } public class Inner { public void method2() { System.out.println("Inner Demo"); } } } public class InnerDemo { public static void main(String args[]) { Outer.Inner in2 = new Outer().new Inner(); in2.method2(); } }
  • 93. คลาสภายในท.อยK=ภายในเมธอด F คลาสภายในประเภทน.Mจะม. access modifier เปLน default เราจะไม=สามารถท.Fจะสร5างอPอบเจกตGของคลาสภายในประเภทน.นอกเมธอด M ท.Fประกาศคลาสได5 คลาสประเภทน.จะสามารถเร.ยกใช5ตวแปรภายในของเมธอดได5ในกรณ.ท.F M ตวแปรนMนประกาศเปLน final เท=านMน ส=วนตวแปรท.เปLนค6ณลกษณะของ F คลาสหร$อค6ณลกษณะของอPอบเจกตG สามารถท.จะเร.ยกใช5ได5เช=นเด.ยวกบ F คลาสภายในท.FอยK=ภายในคลาส
  • 94. ค6ณสมบตท.FสDาคญอ$Fนๆของคลาสภายใน คลาสภายในอาจเปLนคลาสแบบ abstract หร$ออนเตอรGเฟสได5 คลาสภายในท.FอยK=ภายในคลาสภายนอกโดยตรง ถ5าม. modifier เปLน static จะกลายเปLนคลาสปกต และสามารถสร5างอPอบเจกตGโดยการเร.ยกช$Fอของ คลาสภายนอกได5ดงน.M Outer.Inner in3 = Outer.new Inner(); คลาสภายในไม=สามารถท.Fประกาศให5ม.ค6ณลกษณะหร$อเมธอดเปLนแบบ static ได5เว5นแต=คลาสภายในจะเปLนคลาสแบบ static คลาสภายในสามารถท.Fจะใช5ตวแปรท.FเปLนค6ณลกษณะของคลาสหร$อ ค6ณลกษณะของอPอบเจกตGของคลาสภายนอกได5
  • 95. ตวอย+างโปรแกรมแสดงคลาสท.อยK=ภายในเมธอด F public class MOuter { private int a = 1; public void method(final int b) { final int c = 2; int d = 3; class Inner { private void iMethod() { System.out.println("a = "+a); System.out.println("b = "+b); System.out.println("c = "+c); System.out.println("d = "+d); //illegal } } } }
  • 96. Generic Types เราสามารถท.จะประกาศคลาสหร$ออนเตอรGเฟสใดๆให5ม.ชนดข5อมKลเปLนแบบ F ทFวไป (Generic Type) public class ClassName(TypeVariable) ตวอย=างเช=น – public class Box<T> จะระบ6ชนดข5อมKลแบบเจาะจงได5ตอนท.Fสร5างอPอบเจกตG ตวอย=างเช=น – Box<Integer> integerBox = new Box<Integer>();
  • 97. ตวอย+างแสดงคลาสท.ใช5 Generic Type F public class Box<T> { private T t; public void add(T t) { this.t = t; } public T get() { return t; } } ----------------------------------------------------------- public class BoxDemo { public static void main(String[] args) { Box<Integer> integerBox = new Box<Integer>(); integerBox.add(new Integer(10)); Integer someInteger = integerBox.get(); // no cast! System.out.println(someInteger); } }
  • 98. เมธอดแบบ Generic เราสามารถท.จะใช5 Generic Type กบเมธอดหร$อ constructor ใดๆกPได5 F [modifier] <TypeVariable> return_type methodName(TypeVaraible varName) { [method_body] } โดยท.F – TypeVariable ค$อช$Fอของตวแปรชนดข5อมKล – varName ค$อช$Fอ argument
  • 99. ตวอย+างแสดงคลาสท.ประกาศเมธอดแบบ Generic F public class BoxMethod { public <U> void inspect(U u) { System.out.println("U: " + u.getClass().getName()); } } ------------------------------------------------------- public class BoxMethodDemo { public static void main(String[] args) { BoxMethod box = new BoxMethod(); box.inspect(3.2); } }
  • 100. Annotation  ภาษาจาวาม.คDาสFง annotation (เคร$Fองหมาย @) ซNFงจะให5ข5อมKลเก.Fยวกบโปรแกรม โดยท.Fจะ ไม=ม.ผลโดยตรงต=อคDาสFงใดๆ  annotation จะถKกใช5งานในกรณ.ต=างๆ ดงน.M – เปLนข5อมKลสDาหรบคอมไพเลอรG เพ$Fอตรวจจบข5อผดพลาดหร$อ warning ของโปรแกรม – ช=วยในกระบวนการขMนตอนการคอมไพลGและตดตMง (deployment) ทMงน.MซอฟตGแวรGในการ คอมไพลG สามารถท.จะประมวลผลข5อมKล annotation ในการสร5างโค5ดท.FเปLนไฟลG XML ได5 F – ช=วยในกระบวนการขMนตอน runtime ทMงน.Mจาก annotation บางคDาสFงจะสามารถตว รสอบได5ในช=วง runtime
  • 101. Annotation  คDาสFง annotation @ มกจะถKกประกาศเปLนคDาสFงแรก ตามด5วยช$Fอของ annotation ซNFง อาจม. element ท.Fม. named หร$อ unnamed valued  ตวอย=างเช=น @Author( name = "Benjamin Franklin", date = "3/27/2003" ) class MyClass() { } หร$อ @SuppressWarnings(value = "unchecked") void myMethod() { }
  • 102. Annotation Document @interface ClassPreamble { String author(); String date(); int currentRevision() default 1; String lastModified() default "N/A"; String lastModifiedBy() default "N/A"; String[] reviewers(); // Note use of array } @ClassPreamble ( author = "John Doe", date = "3/17/2002", currentRevision = 6, lastModified = "4/12/2004", lastModifiedBy = "Jane Doe", reviewers = {"Alice", "Bob", "Cindy"} // Note array notation ) public class Generation3List extends Generation2List { // class code goes here }
  • 103. Annotation ท.Fใช5โดยคอมไพเลอรG  ภาษาจาวาได5กDาหนด annotation สDาหรบคอมไพเลอรGไว5สามคDาสFงค$อ @Depreacted, @Override และ @Suppresswarnings  @Deprecated เราจะใช5 annotationน.M ในกรณ.ท.Fต5องการระบ6ว=าคDาสFงเช=นคลาส เมธอด หร$อค6ณลกษณะใด เปLนคDาสFงท.Fไม=ควรจะใช5แล5ว เพ$Fอให5คอมไพเลอรGส=งคDาสFง warning ออกมาในช=วง การคอมไพลG  @Override เราจะใช5 annotationน.Mเพ$FอจะบอกคอมไพเลอรGว=า element น.M override คDาสFง element ของ superclass  @SuppressWarnings เราจะใช5 annotationน.Mเพ$FอบอกคอมไพเลอรGไม=ตองแสดงคDาสFง 5 warning ท.Fอาจ ปรากฎขNนจากการใช5คDาสFงท.Fตามมาน.ในช=วงการคอมไพลGโปรแกรม M M
  • 104. สร6ปเน$อหาของบท M เมธอดท.FกDาหนดขNนในคลาสใดๆสามารถเร.ยกใช5งานได5สองรKปแบบค$อ การ M เร.ยกใช5งานจากคลาสท.Fตางกน และการเร.ยกใช5งานภายในคลาสเด.ยวกน = เมธอดท.FกDาหนดขNนในคลาสอาจม. argument ท.Fรบค=าเพ$FอนDาไปใช5ในเมธอด M เมธอดใดๆของคลาสสามารถท.Fจะม.ค=าท.Fสงกลบมาได5 ทMงน.การประกาศ = M เมธอดจะต5องระบ6ชนดข5อมKลของค=าท.Fจะส=งกลบ เมธอดสามารถแบ=งเปLนเมธอดของอPอบเจกตG (หร$อเร.ยกว=าเมธอดแบบ non- static) และเมธอดของคลาส (หร$อเร.ยกว=าเมธอดแบบ static) เมธอดของคลาสใดท.Fม. modifier เปLนแบบ static จะทDาให5สามารถถKก เร.ยกใช5งาน โดยใช5ช$FอของคลาสนMนได5เลย เมธอดแบบ overloaded ค$อ ม.เมธอดท.ม.ช$Fอเด.ยวกนแต=จะม.จDานวนหร$อชนด F ข5อมKลของ argument ท.Fต=างกน
  • 105. สร6ปเน$อหาของบท M โดยทFวไป ค6ณลกษณะของคลาสจะม. modifier เปLนแบบ private ทMงน.เพ$อ M F ปoองกนการเข5าถNงจากคลาสอ$Fน โดยทFวไป เมธอดของคลาสจะม. modifier เปLนแบบ public ทMงน.เพ$อให5 M F เมธอดจากคลาสอ$Fนเร.ยกใช5ได5 ช$Fอของเมธอดท.Fเก.Fยวข5องกบค6ณลกษณะของคลาส นยมใช5 setXxx สDาหรบ เมธอดท.Fม.ไว5เพ$FอกDาหนดค=าให5กบค6ณลกษณะ xxx และใช5 getXxx สDาหรบ เมธอดท.Fจะส=งค=ากลบเปLนค6ณลกษณะ xxx  ค.ยGเวรGด protected จะทDาให5คลาสท.FเปLน subclass สามารถท.Fจะอ5างองถNงค6ณลกษณะหร$อ เมธอดของ superclass ได5
  • 106. สร6ปเน$อหาของบท M คลาสท6กคลาสในภาษาจาวาถ5าไม=ได5สบทอดจากคลาสใดเลยจะถ$อว=าคลาส $ นMนส$บทอดจากคลาสท.ช$Fอ Object F เมธอดแบบ overriden จะเปLนการเข.ยนเมธอดของ superclass ขNMนใหม=  super เปLนค.ยเวรGดท.Fใช5ในการอ5างองถNง superclass G การม.ได5หลายรKปแบบหมายถNง – การท.เราสามารถท.จะสร5างหร$ออ5างถNงอPอบเจกตGของคลาสท.ส$บทอดกนได5 F F F หลายรKปแบบ – การท.เราสามารถท.จะอ5างถNงเมธอดช$Fอเด.ยวกนได5หลายรKปแบบ F F เมธอดแบบ overloaded หมายถNงเมธอดท.ม.ช$Fอเด.ยวกนมากกว=าหนNงเมธอด F F โดยม.จDานวนหร$อชนดของ argument ท.Fแตกต=างกน
  • 107. สร6ปเน$อหาของบท M เมธอดแบบ overridden หมายถNงการท.F subclass สร5างเมธอดท.ม.อยKแล5วใน F = superclass ขNMนใหม= โดยใช5ช$Fอ argument และชนดข5อมKลของค=าท.ส=งกลบ F ของเมธอดเหม$อนเดม ค.ยGเวรGด instanceof เปLนตวดDาเนนการท.Fใช5กบอPอบเจกตGและคลาส เพ$อตรวจ F สอบว=าอPอบเจกตGใดๆ เปLน อPอบเจกตGของคลาสท.ระบ6หร$อไม= F การ casting อPอบเจกตG ทDาให5เราสามารถจะกDาหนดอPอบเจกตGของคลาสท.F เปLน superclass ให5กบตวแปรท.FกDาหนดเปLนคลาสท.FเปLน subclass ได5 Constructor หมายถNง เมธอดท.ม.ช$Fอเด.ยวกนกบช$Fอคลาส แต=จะไม=ม.การส=ง F ค=ากลบและจะไม=ม.การใส=ค.ยเวรGด void โดยคลาสท6กคลาสจะม. default G constructor มาให5อยK=แล5ว แต=เราสามารถท.FจะกDาหนด constructor ขNMนใหม= เองได5
  • 108. สร6ปเน$อหาของบท M Constructor แบบ overloaded หมายถNง constructor ท.Fม.จDานวนหร$อชนด ของ argument ท.Fแตกต=างกน เมธอดท.Fช$Fอ this() เปLนการเร.ยกใช5 constructor ของคลาสตวเอง Constructor แบบ default ของคลาสท.FเปLน superclass จะถKกเร.ยกใช5โดย อตโนมตท6กครMงท.ม.การสร5าง อPอบเจกตGของคลาส F คลาสท.ช$Fอ Object ม.เมธอดท.FสDาคญอยKสองเมธอดค$อเมธอด toString() และ F = เมธอด equals() Auto-boxing / Auto-unboxing ค$อการแปลงค=าระหว=างชนกข5อมKลพ$นฐาน M กบคลาสประเภท Wrapper ท.Fสอดคล5องกนโดยอตโนมต เมธอดแบบ static สามารถถKกเร.ยกใช5จากช$Fอของคลาสได5โดยไม=จDาเปLน ต5องสร5างอPอบเจกตG
  • 109. สร6ปเน$อหาของบท M คลาสแบบ final ค$อคลาสท.ไม=สามารถส$บทอดได5 F คลาสภายในหมายถNงคลาสท.อยK=ภายในคลาส หร$อคลาสท.FอยKภายในเมธอด F = Generic Type สามารถท.จะทDาให5เราประกาศคลาสหร$ออนเตอรGเฟสใดๆให5ม. F ชนดข5อมKลเปLนแบบทFวไป (Generic Type) แล5วค=อยระบ6ชนดข5อมKลแบบ เจาะจงตอนท.สร5างอPอบเจกตGได5 F เมธอดแบบ Generic ค$ดเมธอดท.Fม. argument ท.เปLน Generic Type F Annotation จะให5ข5อมKลเก.Fยวกบโปรแกรม โดยท.Fจะไม=ม.ผลโดยตรงต=อคDาสFง ใดๆของ code ท.ทDาการบนทNก F