Java - วัตถุและคลาส

Java เป็นภาษาเชิงวัตถุ ในฐานะภาษาที่มีคุณลักษณะเชิงวัตถุ Java จึงสนับสนุนแนวคิดพื้นฐานดังต่อไปนี้ -

  • Polymorphism
  • Inheritance
  • Encapsulation
  • Abstraction
  • Classes
  • Objects
  • Instance
  • Method
  • ข้อความผ่าน

ในบทนี้เราจะพิจารณาแนวคิด - คลาสและวัตถุ

  • Object- วัตถุมีสถานะและพฤติกรรม ตัวอย่าง: สุนัขมีสถานะ - สีชื่อสายพันธุ์ตลอดจนพฤติกรรม - กระดิกหางเห่ากิน วัตถุคือตัวอย่างของการเรียน.

  • Class - คลาสสามารถกำหนดเป็นเทมเพลต / พิมพ์เขียวที่อธิบายพฤติกรรม / สถานะที่อ็อบเจ็กต์ประเภทรองรับ

วัตถุใน Java

ตอนนี้ให้เรามองลึกลงไปว่าอะไรคือวัตถุ หากเราพิจารณาโลกแห่งความเป็นจริงเราจะพบสิ่งของมากมายรอบตัวเรารถยนต์สุนัขมนุษย์ ฯลฯ วัตถุทั้งหมดเหล่านี้มีสถานะและพฤติกรรม

หากเราพิจารณาสุนัขสถานะของมันคือ - ชื่อสายพันธุ์สีและพฤติกรรมคือ - เห่ากระดิกหางวิ่ง

หากคุณเปรียบเทียบออบเจ็กต์ซอฟต์แวร์กับวัตถุในโลกแห่งความเป็นจริงพวกมันมีลักษณะที่คล้ายคลึงกันมาก

ออบเจ็กต์ซอฟต์แวร์ยังมีสถานะและพฤติกรรม สถานะของอ็อบเจ็กต์ซอฟต์แวร์จะถูกเก็บไว้ในฟิลด์และพฤติกรรมจะแสดงผ่านวิธีการ

ดังนั้นในการพัฒนาซอฟต์แวร์เมธอดจะดำเนินการกับสถานะภายในของอ็อบเจ็กต์และการสื่อสารอ็อบเจ็กต์กับอ็อบเจ็กต์จะทำผ่านวิธีการ

คลาสใน Java

คลาสคือพิมพ์เขียวที่ใช้สร้างวัตถุแต่ละชิ้น

ต่อไปนี้เป็นตัวอย่างของคลาส

ตัวอย่าง

public class Dog {
   String breed;
   int age;
   String color;

   void barking() {
   }

   void hungry() {
   }

   void sleeping() {
   }
}

คลาสสามารถมีตัวแปรประเภทใดก็ได้ดังต่อไปนี้

  • Local variables- ตัวแปรที่กำหนดภายในวิธีการตัวสร้างหรือบล็อกเรียกว่าตัวแปรท้องถิ่น ตัวแปรจะถูกประกาศและเริ่มต้นภายในเมธอดและตัวแปรจะถูกทำลายเมื่อเมธอดเสร็จสมบูรณ์

  • Instance variables- ตัวแปรอินสแตนซ์คือตัวแปรภายในคลาส แต่อยู่นอกเมธอดใด ๆ ตัวแปรเหล่านี้เริ่มต้นเมื่อคลาสถูกสร้างอินสแตนซ์ ตัวแปรอินสแตนซ์สามารถเข้าถึงได้จากภายในเมธอดตัวสร้างหรือบล็อกของคลาสนั้น ๆ

  • Class variables - ตัวแปรคลาสคือตัวแปรที่ประกาศภายในคลาสนอกเมธอดใด ๆ ด้วยคีย์เวิร์ดแบบคงที่

คลาสสามารถมีเมธอดจำนวนเท่าใดก็ได้เพื่อเข้าถึงค่าของเมธอดประเภทต่างๆ ในตัวอย่างข้างต้นการเห่า (), หิว () และการนอนหลับ () เป็นวิธีการ

ต่อไปนี้เป็นหัวข้อสำคัญบางส่วนที่ต้องพูดถึงเมื่อพิจารณาถึงคลาสของภาษา Java

ตัวสร้าง

เมื่อพูดถึงชั้นเรียนหนึ่งในหัวข้อย่อยที่สำคัญที่สุดคือตัวสร้าง ทุกชั้นมีตัวสร้าง ถ้าเราไม่เขียนคอนสตรัคเตอร์สำหรับคลาสอย่างชัดเจนคอมไพลเลอร์ Java จะสร้างคอนสตรัคเตอร์เริ่มต้นสำหรับคลาสนั้น

ทุกครั้งที่สร้างออบเจ็กต์ใหม่จะมีการเรียกตัวสร้างอย่างน้อยหนึ่งตัว กฎหลักของคอนสตรัคเตอร์คือควรมีชื่อเดียวกับคลาส คลาสสามารถมีตัวสร้างได้มากกว่าหนึ่งตัว

ต่อไปนี้เป็นตัวอย่างของตัวสร้าง -

ตัวอย่าง

public class Puppy {
   public Puppy() {
   }

   public Puppy(String name) {
      // This constructor has one parameter, name.
   }
}

Java ยังรองรับSingleton Classesซึ่งคุณจะสามารถสร้างคลาสได้เพียงอินสแตนซ์เดียว

Note- เรามีผู้สร้างสองประเภทที่แตกต่างกัน เราจะพูดถึงผู้สร้างโดยละเอียดในบทต่อ ๆ ไป

การสร้างวัตถุ

ดังที่ได้กล่าวไว้ก่อนหน้านี้คลาสจัดเตรียมพิมพ์เขียวสำหรับวัตถุ โดยพื้นฐานแล้ววัตถุถูกสร้างขึ้นจากคลาส ใน Java คีย์เวิร์ดใหม่ถูกใช้เพื่อสร้างอ็อบเจ็กต์ใหม่

มีสามขั้นตอนในการสร้างวัตถุจากคลาส -

  • Declaration - การประกาศตัวแปรด้วยชื่อตัวแปรที่มีประเภทออบเจ็กต์

  • Instantiation - คำหลัก 'ใหม่' ใช้เพื่อสร้างวัตถุ

  • Initialization- คำหลัก 'ใหม่' ตามด้วยการเรียกไปยังผู้สร้าง สายนี้เริ่มต้นวัตถุใหม่

ต่อไปนี้เป็นตัวอย่างการสร้างวัตถุ -

ตัวอย่าง

public class Puppy {
   public Puppy(String name) {
      // This constructor has one parameter, name.
      System.out.println("Passed Name is :" + name );
   }

   public static void main(String []args) {
      // Following statement would create an object myPuppy
      Puppy myPuppy = new Puppy( "tommy" );
   }
}

หากเราคอมไพล์และรันโปรแกรมข้างต้นมันจะให้ผลลัพธ์ดังต่อไปนี้ -

เอาต์พุต

Passed Name is :tommy

การเข้าถึงตัวแปรอินสแตนซ์และวิธีการ

ตัวแปรอินสแตนซ์และวิธีการเข้าถึงผ่านอ็อบเจ็กต์ที่สร้างขึ้น ในการเข้าถึงตัวแปรอินสแตนซ์ต่อไปนี้คือพา ธ แบบเต็ม -

/* First create an object */
ObjectReference = new Constructor();

/* Now call a variable as follows */
ObjectReference.variableName;

/* Now you can call a class method as follows */
ObjectReference.MethodName();

ตัวอย่าง

ตัวอย่างนี้อธิบายวิธีเข้าถึงตัวแปรอินสแตนซ์และวิธีการของคลาส

public class Puppy {
   int puppyAge;

   public Puppy(String name) {
      // This constructor has one parameter, name.
      System.out.println("Name chosen is :" + name );
   }

   public void setAge( int age ) {
      puppyAge = age;
   }

   public int getAge( ) {
      System.out.println("Puppy's age is :" + puppyAge );
      return puppyAge;
   }

   public static void main(String []args) {
      /* Object creation */
      Puppy myPuppy = new Puppy( "tommy" );

      /* Call class method to set puppy's age */
      myPuppy.setAge( 2 );

      /* Call another class method to get puppy's age */
      myPuppy.getAge( );

      /* You can access instance variable as follows as well */
      System.out.println("Variable Value :" + myPuppy.puppyAge );
   }
}

หากเราคอมไพล์และรันโปรแกรมข้างต้นมันจะให้ผลลัพธ์ดังต่อไปนี้ -

เอาต์พุต

Name chosen is :tommy
Puppy's age is :2
Variable Value :2

กฎการประกาศไฟล์ต้นฉบับ

ในส่วนสุดท้ายของส่วนนี้ตอนนี้เรามาดูกฎการประกาศไฟล์ต้นฉบับกัน กฎเหล่านี้จำเป็นอย่างยิ่งเมื่อประกาศคลาสคำสั่งนำเข้าและคำสั่งแพ็กเกจในไฟล์ต้นฉบับ

  • สามารถมีคลาสสาธารณะได้เพียงหนึ่งคลาสต่อไฟล์ต้นทาง

  • ซอร์สไฟล์สามารถมีคลาสที่ไม่เป็นสาธารณะได้หลายคลาส

  • ชื่อคลาสสาธารณะควรเป็นชื่อของซอร์สไฟล์เช่นกันซึ่งควรต่อท้ายด้วย .javaในตอนท้าย ตัวอย่างเช่นชื่อคลาสเป็นคลาสสาธารณะ Employee {}ดังนั้นซอร์สไฟล์ควรเป็น Employee.java

  • ถ้าคลาสถูกกำหนดไว้ภายในแพ็กเกจคำสั่งแพ็กเกจควรเป็นคำสั่งแรกในไฟล์ต้นทาง

  • หากมีคำสั่งนำเข้าจะต้องเขียนระหว่างคำสั่งแพ็กเกจและการประกาศคลาส หากไม่มีคำสั่งแพ็กเกจคำสั่งนำเข้าควรเป็นบรรทัดแรกในไฟล์ต้นฉบับ

  • คำสั่งอิมพอร์ตและแพ็กเกจจะบ่งบอกถึงคลาสทั้งหมดที่มีอยู่ในซอร์สไฟล์ เป็นไปไม่ได้ที่จะประกาศคำสั่งการนำเข้าและ / หรือแพ็กเกจที่แตกต่างกันไปยังคลาสต่างๆในไฟล์ต้นทาง

ชั้นเรียนมีระดับการเข้าถึงหลายระดับและมีชั้นเรียนหลายประเภท คลาสนามธรรมคลาสสุดท้าย ฯลฯ เราจะอธิบายเกี่ยวกับสิ่งเหล่านี้ทั้งหมดในบทตัวปรับการเข้าถึง

นอกเหนือจากคลาสประเภทที่กล่าวมาแล้ว Java ยังมีคลาสพิเศษบางคลาสที่เรียกว่าคลาสภายในและคลาส Anonymous

แพ็คเกจ Java

พูดง่ายๆก็คือวิธีการจัดหมวดหมู่คลาสและอินเทอร์เฟซ เมื่อพัฒนาแอปพลิเคชันใน Java จะมีการเขียนคลาสและอินเทอร์เฟซหลายร้อยรายการดังนั้นการจัดหมวดหมู่คลาสเหล่านี้จึงเป็นสิ่งที่จำเป็นและทำให้ชีวิตง่ายขึ้นมาก

นำเข้างบ

ใน Java หากมีการกำหนดชื่อแบบเต็มซึ่งรวมถึงแพ็กเกจและชื่อคลาสคอมไพเลอร์จะสามารถค้นหาซอร์สโค้ดหรือคลาสได้อย่างง่ายดาย คำสั่งนำเข้าเป็นวิธีการให้ตำแหน่งที่เหมาะสมสำหรับคอมไพเลอร์เพื่อค้นหาคลาสนั้น ๆ

ตัวอย่างเช่นบรรทัดต่อไปนี้จะขอให้คอมไพลเลอร์โหลดคลาสทั้งหมดที่มีอยู่ในไดเร็กทอรี java_installation / java / io -

import java.io.*;

กรณีศึกษาง่ายๆ

สำหรับกรณีศึกษาของเราเราจะสร้างสองคลาส พวกเขาคือ Employee และ EmployeeTest

เปิดแผ่นจดบันทึกก่อนแล้วเพิ่มรหัสต่อไปนี้ จำไว้ว่านี่คือคลาสพนักงานและคลาสนี้เป็นคลาสสาธารณะ ตอนนี้บันทึกไฟล์ต้นฉบับนี้ด้วยชื่อ Employee.java

คลาสพนักงานมีตัวแปรเช่นชื่ออายุการกำหนดและเงินเดือน คลาสมีคอนสตรัคเตอร์ที่กำหนดไว้อย่างชัดเจนหนึ่งตัวซึ่งรับพารามิเตอร์

ตัวอย่าง

import java.io.*;
public class Employee {

   String name;
   int age;
   String designation;
   double salary;

   // This is the constructor of the class Employee
   public Employee(String name) {
      this.name = name;
   }

   // Assign the age of the Employee  to the variable age.
   public void empAge(int empAge) {
      age = empAge;
   }

   /* Assign the designation to the variable designation.*/
   public void empDesignation(String empDesig) {
      designation = empDesig;
   }

   /* Assign the salary to the variable	salary.*/
   public void empSalary(double empSalary) {
      salary = empSalary;
   }

   /* Print the Employee details */
   public void printEmployee() {
      System.out.println("Name:"+ name );
      System.out.println("Age:" + age );
      System.out.println("Designation:" + designation );
      System.out.println("Salary:" + salary);
   }
}

ดังที่ได้กล่าวไว้ก่อนหน้านี้ในบทช่วยสอนนี้การประมวลผลเริ่มต้นจากวิธีการหลัก ดังนั้นเพื่อให้เราสามารถเรียกใช้คลาส Employee นี้ควรมีวิธีการหลักและควรสร้างวัตถุ เราจะสร้างคลาสแยกสำหรับงานเหล่านี้

ต่อไปนี้คือคลาสEmployeeTestซึ่งสร้างสองอินสแตนซ์ของคลาส Employee และเรียกใช้เมธอดสำหรับแต่ละอ็อบเจ็กต์เพื่อกำหนดค่าสำหรับตัวแปรแต่ละตัว

บันทึกรหัสต่อไปนี้ในไฟล์ EmployeeTest.java

import java.io.*;
public class EmployeeTest {

   public static void main(String args[]) {
      /* Create two objects using constructor */
      Employee empOne = new Employee("James Smith");
      Employee empTwo = new Employee("Mary Anne");

      // Invoking methods for each object created
      empOne.empAge(26);
      empOne.empDesignation("Senior Software Engineer");
      empOne.empSalary(1000);
      empOne.printEmployee();

      empTwo.empAge(21);
      empTwo.empDesignation("Software Engineer");
      empTwo.empSalary(500);
      empTwo.printEmployee();
   }
}

ตอนนี้รวบรวมทั้งสองคลาสแล้วเรียกใช้EmployeeTestเพื่อดูผลลัพธ์ดังนี้ -

เอาต์พุต

C:\> javac Employee.java
C:\> javac EmployeeTest.java
C:\> java EmployeeTest
Name:James Smith
Age:26
Designation:Senior Software Engineer
Salary:1000.0
Name:Mary Anne
Age:21
Designation:Software Engineer
Salary:500.0

Next คืออะไร?

ในเซสชันถัดไปเราจะพูดถึงประเภทข้อมูลพื้นฐานใน Java และวิธีใช้เมื่อพัฒนาแอปพลิเคชัน Java